почему "char *" может указывать на "const char *"? - PullRequest
7 голосов
/ 02 октября 2011

следующий код может быть правильно скомпилирован как на VC, так и на gcc:

char *str = "I am a const!";
str[2] = 'n';

однако, очевидно, что есть ошибка времени выполнения. Так как "я const!" такое const char *, почему компилятор не выдает ошибку или даже предупреждение ??


Кроме того, если я определю char a[] = "I am const!", все элементы в a могут быть изменены, почему на этот раз строковые литералы становятся nonconst?

1 Ответ

12 голосов
/ 02 октября 2011

Что касается C, то этот строковый литерал не является константой, это char[14], который вы назначаете для char *, что совершенно нормально.

Однако C говорит, что изменение строкового литерала - неопределенное поведение.

...