Почему работает следующий код в C?
const char* str = NULL;
str = "test";
str = "test2";
Так как str является указателем на постоянный символ, почему нам разрешено назначать ему разные строковые литералы? Кроме того, как мы можем защитить str от модификации? Похоже, что это может быть проблемой, если, например, позже мы назначили str более длинной строке, которая закончила писать другую часть памяти.
Я должен добавить, что в своем тесте я распечатал адрес памяти str до и после каждого из моих назначений, и он никогда не менялся. Итак, хотя str является указателем на const char, память фактически изменяется. Я задавался вопросом, возможно ли, что это проблема с C?