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