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