0

可能重复:
char a[] = “string”; 之间有什么区别?和 char *p = “字符串”;

char *str = "Hello";
printf("%c",++*str);

这会在使用 gcc 的 linux 上产生分段错误。第一个语句更改为的那一刻

char str[10] = "Hello";

有用。可能是什么原因?

4

2 回答 2

3

尝试修改字符串文字是未定义的行为。

编译器可以自由地将它放在只读内存中(就像您的情况一样)。尝试修改只读内存可能会触发段错误。

于 2012-06-19T09:25:29.980 回答
-1

该语句char *str = "Hello";将字符串“Hello”存储在 RO-section 中,并将 RO-section 区域的地址(其中存储“Hello”)分配给 str。存储在 RO 部分的数据无法修改,因此您遇到了段错误。

char str[10] = "Hello";

也是错误的。你应该改为写

char str[10];
strncpy(str,"Hello",sizeof(str));
于 2012-06-19T09:35:25.650 回答