这个解除引用声明有什么问题?

时间:2012-02-17 02:36:36

标签: c

我在一个带指针的练习中有这个:

char *str = "Hello";
int count = 0;
int len = 5;
printf("%c\n", *(str + count));
printf("%c\n", *(str + len - count - 1));
*(str + count) = *(str + len - count - 1);

*(str + count)*(str + len - count - 1)都是printf证明的有效值(我得到Ho)。那么为什么我在运行上面的时候会得到bus error

1 个答案:

答案 0 :(得分:3)

str指向一个字符串文字,它驻留在内存中,它是未定义的写入行为。很多时候,编译器会将这些字符串文字放入具有不包含写权限的权限的内存中。这就是你崩溃的原因。

将其更改为:

char str[] = "Hello";

这将在堆栈上创建一个数组,并用C字符串"Hello"初始化它;因为它驻留在堆栈上,你可以自由修改它。