Потому что "Hello"
создает const char [].Это распадается до const char*
, а не char*
.В C ++ строковые литералы доступны только для чтения.Вы создали указатель на такой литерал и пытаетесь записать в него.
Но когда вы делаете
string s1 = "hello";
Вы копируете const char * "hello" в s1
,Разница в том, что в первом примере s1
указывает на только для чтения «привет», а во втором примере «только для чтения» «привет» копируется в неконстантный s1
, позволяя вам получить доступ к элементам в скопированной строке, чтобы делать с ними то, что вы хотите.
Если вы хотите сделать то же самое с char *, вам нужно выделить место для данных char и скопировать в них привет
char hello[] = "hello"; // creates a char array big enough to hold "hello"
hello[0] = 'w'; // writes to the 0th char in the array