为什么此代码段会给出分段错误

时间:2011-10-05 19:17:11

标签: c pointers segmentation-fault

这段代码抛出了seg错误。请帮我确定相同的原因

#include<stdio.h>

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

感谢

3 个答案:

答案 0 :(得分:6)

C FAQ 1.32中解释得很清楚。修改字符串文字是非法的。

  

6.4.5 / 6

     

没有特别说明这些阵列是否与它们不同   元素具有适当的值。如果程序尝试   修改这样的数组,行为是未定义的。

答案 1 :(得分:3)

    str = "abcd";
    str[0] = 'r';

这会尝试修改字符串文字。正式地说,这是未定义的行为。但是,在大多数现代系统中,保存字符串文字的内存将被标记为只读,因此尝试修改它们会产生错误。

答案 2 :(得分:0)

这与分段错误

相似的 Question 类似

请参阅此内容以获取更多信息。