Почему этот фрагмент кода дает ошибку сегментации - PullRequest
0 голосов
/ 05 октября 2011

Этот фрагмент кода выдает ошибку seg. Пожалуйста, помогите мне определить причину того же

#include<stdio.h>

int main() {
        char* str;
        str = "abcd";
        str[0] = 'r';
        printf("%c\n" , str[0]);
        return 0;
}

спасибо

Ответы [ 3 ]

6 голосов
/ 05 октября 2011

Хорошо объяснено в C FAQ 1.32 . Нельзя изменять строковые литералы.

6.4.5 / 6

Не определено, различаются ли эти массивы при условии, что их элементы имеют соответствующие значения. Если , программа пытается изменить такой массив , поведение не определено.

3 голосов
/ 05 октября 2011
    str = "abcd";
    str[0] = 'r';

Попытка изменить строковый литерал.Официально это неопределенное поведение.Однако в большинстве современных систем память, содержащая строковые литералы, будет помечена только для чтения, поэтому попытка их изменения приведет к ошибке.

0 голосов
/ 05 октября 2011

Это похоже Вопрос , относящийся к ошибке сегментации

См. Это для получения дополнительной информации.

...