这段代码抛出了seg错误。请帮我确定相同的原因
#include<stdio.h>
int main() {
char* str;
str = "abcd";
str[0] = 'r';
printf("%c\n" , str[0]);
return 0;
}
感谢
答案 0 :(得分:6)
在C FAQ 1.32中解释得很清楚。修改字符串文字是非法的。
6.4.5 / 6
没有特别说明这些阵列是否与它们不同 元素具有适当的值。如果程序尝试 修改这样的数组,行为是未定义的。
答案 1 :(得分:3)
str = "abcd";
str[0] = 'r';
这会尝试修改字符串文字。正式地说,这是未定义的行为。但是,在大多数现代系统中,保存字符串文字的内存将被标记为只读,因此尝试修改它们会产生错误。
答案 2 :(得分:0)