指针和字符串导致分段错误

时间:2012-06-19 09:23:31

标签: c string pointers segmentation-fault

  

可能重复:
  What is the difference between char a[] = “string”; and char *p = “string”;

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

这使用gcc在Linux上产生分段错误。 第一个语句更改为

的那一刻
char str[10] = "Hello";

有效。可能是什么原因?

2 个答案:

答案 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));