Изменение значения указателя на символ в c приводит к segfault
Следующий код вызывает ошибку сегментации в моей системе. Я не могу понять, почему. Любая помощь будет оценена.
#include<stdio.h>
int main() {
char * a = "abc";
*a = 'c';
printf("%c\n", *a);
return 0;
}
2 ответа
Стандарт явно перечисляет это как неопределенное поведение в §J.2:
- программа пытается изменить строковый литерал (6.4.5)
Если вы хотите скопировать его в локальный массив, выполните:
char a[] = "abc";
a
это массив в стеке, и вы можете изменить его свободно.
Попытка изменить строковый литерал приводит к неопределенному поведению.