char指针中的分段错误

时间:2017-11-08 06:54:57

标签: c string-literals

运行以下代码时出现分段错误。这个错误的原因是什么?请帮忙

int main()
{
    char *str2 = "Hello";
    str2[3] = 'J';
    printf("%s\n",str2);
    return 0;
}

3 个答案:

答案 0 :(得分:7)

这是未定义的行为,因为您正在尝试修改string literal的内容。字符串文字主要存储在只读位置中。所以你不要修改它,否则会调用未定义的行为。

C11§6.4.5字符串文字(第7段):

  

未指明这些数组是否与它们不同   元素具有适当的值。如果程序尝试   修改任一形式的字符串文字,行为未定义“

答案 1 :(得分:3)

您不能修改字符串常量,在这种情况下,它会导致运行时错误。您可以通过将str2的声明更改为:

来解决此问题
char str2[] = "Hello";

这使它成为一个数组,而不是指向字符串常量的指针。

答案 2 :(得分:2)

不允许修改用字符串文字初始化的char*变量指向的内存。它是只读的。