我在一个带指针的练习中有这个:
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
证明的有效值(我得到H
和o
)。那么为什么我在运行上面的时候会得到bus error
?
答案 0 :(得分:3)
str
指向一个字符串文字,它驻留在内存中,它是未定义的写入行为。很多时候,编译器会将这些字符串文字放入具有不包含写权限的权限的内存中。这就是你崩溃的原因。
将其更改为:
char str[] = "Hello";
这将在堆栈上创建一个数组,并用C字符串"Hello"
初始化它;因为它驻留在堆栈上,你可以自由修改它。