#include
int main()
{
char* str = "qwerty";
str[0] = '1';
std::cout << str << std::endl;
return 0;
}
Этот код выдает ошибку access violation. В чем дело? Почему нельзя изменить символ простой не-const строки?
UPD: код сработал при такой инициализации строки: char str[]. Но в чем разница?
Ответ
Строковые константы в коде могут размещаться где-то в отдельном блоке памяти (в дата-секции исполняемого файла, например), который может быть отмечен как "только для чтения". Модифицировать их нельзя, это undefined behavior. Хотя на некоторых компиляторах в некоторых осях при определённых условиях это и может работать, но полагаться на это нельзя.
Если хотите иметь модифицируемую строку, то скопируйте её или объявите как массив (не как указатель).
См. Why is this string reversal C code causing a segmentation fault?
Комментариев нет:
Отправить комментарий