Изменение значения указателя на символ в c приводит к segfault - PullRequest
0 голосов
/ 04 марта 2011

Следующий код вызывает ошибку сегментации в моей системе. Я не могу понять, почему. Любая помощь будет оценена.

#include<stdio.h>
int main() {
    char * a = "abc";
    *a = 'c';
    printf("%c\n", *a);
    return 0;
}

Ответы [ 2 ]

6 голосов
/ 04 марта 2011

Стандарт явно перечисляет это как неопределенное поведение в §J.2:

- Программа пытается изменить строковый литерал (6.4.5)

Если вы хотите скопировать его в локальный массив, выполните:

char a[] = "abc";

a - это массив в стеке, и вы можете свободно его изменять.

2 голосов
/ 04 марта 2011

Попытка изменить строковый литерал приводит к неопределенному поведению.

...