运行以下代码时出现分段错误。这个错误的原因是什么?请帮忙
int main()
{
char *str2 = "Hello";
str2[3] = 'J';
printf("%s\n",str2);
return 0;
}
答案 0 :(得分:7)
这是未定义的行为,因为您正在尝试修改string literal的内容。字符串文字主要存储在只读位置中。所以你不要修改它,否则会调用未定义的行为。
C11§6.4.5字符串文字(第7段):
未指明这些数组是否与它们不同 元素具有适当的值。如果程序尝试 修改任一形式的字符串文字,行为未定义“
答案 1 :(得分:3)
您不能修改字符串常量,在这种情况下,它会导致运行时错误。您可以通过将str2
的声明更改为:
char str2[] = "Hello";
这使它成为一个数组,而不是指向字符串常量的指针。
答案 2 :(得分:2)
不允许修改用字符串文字初始化的char*
变量指向的内存。它是只读的。