可能重复:
What is the difference between char a[] = “string”; and char *p = “string”;
char *str = "Hello";
printf("%c",++*str);
这使用gcc在Linux上产生分段错误。 第一个语句更改为
的那一刻char str[10] = "Hello";
有效。可能是什么原因?
答案 0 :(得分:3)
尝试修改字符串文字是未定义的行为。
编译器可以将它放在只读内存中(就像你的情况一样)。尝试修改只读内存可能会触发段错误。
答案 1 :(得分:-1)
此语句char *str = "Hello";
将字符串“Hello”存储在RO-section中,并将RO-section(其中存储“Hello”)区域的地址分配给str。存储在RO部分中的数据无法修改,因此您将收到段错误。
char str[10] = "Hello";
也错了。你应该写
char str[10];
strncpy(str,"Hello",sizeof(str));