改变指针指向的字符的值
Change value of character pointed by a pointer
我想知道为什么我的代码在 运行 时出错。
我正在尝试更改指针变量指向的字符值。
#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
有什么想法吗?
在此声明中
*pmessage = 'o';
您正在尝试更改字符串文字 "foo"
因为指针的定义类似于
char *pmessage = "foo";
字符串文字在 C 和 C++ 中是不可变的。任何更改字符串文字的尝试都会导致未定义的行为。
来自 C 标准(6.4.5 字符串文字)
7 It is unspecified whether these arrays are distinct provided their
elements have the appropriate values. If the program attempts to
modify such an array, the behavior is undefined.
我想知道为什么我的代码在 运行 时出错。
我正在尝试更改指针变量指向的字符值。
#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
有什么想法吗?
在此声明中
*pmessage = 'o';
您正在尝试更改字符串文字 "foo"
因为指针的定义类似于
char *pmessage = "foo";
字符串文字在 C 和 C++ 中是不可变的。任何更改字符串文字的尝试都会导致未定义的行为。
来自 C 标准(6.4.5 字符串文字)
7 It is unspecified whether these arrays are distinct provided their elements have the appropriate values. If the program attempts to modify such an array, the behavior is undefined.