我想知道为什么我的代码在运行时会给我错误。
我正在尝试更改指针变量指向的字符值。
#include <stdio.h>
int main() {
char amessage[] = "foo";
char *pmessage = "foo";
// try 1
amessage[0] = 'o'; // change the first character to '0'
printf("%s\n", amessage);
// try 2
*pmessage = 'o'; // This one does not work
printf("%s\n", pmessage);
}
第一次尝试有效,并打印ooo
。但第二个给了我:
[1] 9677 bus error ./a.out
有什么想法吗?
答案 0 :(得分:4)
在本声明中
*pmessage = 'o';
您正在尝试更改字符串文字"foo"
,因为指针定义为
char *pmessage = "foo";
字符串文字在C和C ++中是不可变的。任何更改字符串文字的尝试都会导致未定义的行为。
来自C标准(6.4.5字符串文字)
7未指明这些阵列是否与它们不同 元素具有适当的值。 如果程序尝试 修改这样的数组,行为是未定义的。