5

考虑以下代码。

char message[]="foo";

void main(void){
    message[] = "bar";
}

为什么 MPLAB IDE v8.63 中存在语法错误?我只是想改变字符数组的值。

4

5 回答 5

12

声明后不能使用这样的字符数组。如果要为字符数组分配新值,可以这样做:-

strcpy(message, "bar");
于 2013-01-18T09:53:22.073 回答
10

像这样的作业

message[] = "bar";

或者

message = "bar";

C 不支持。

初始赋值起作用的原因是它实际上是伪装成赋值的数组初始化。编译器解释

char message[]="foo";

作为

char message[4] = {'f', 'o', 'o', '\0'};

这里实际上没有"foo"涉及字符串文字。

但是当你尝试

message = "bar";

“bar”被解释为实际的字符串文字,不仅如此,而且message不是可修改的左值,即。你不能给它分配东西。如果要修改数组,则必须逐个字符地进行:

message[0] = 'b';
message[1] = 'a';

等,或者(更好地)使用为您执行此操作的库函数,例如 strcpy()。

于 2013-01-18T09:53:34.247 回答
1

您只能在声明 char 数组时的初始化中执行此操作

message[] = "bar";

你不能在你的代码中做到这一点

要修改它,您可以使用strcpyfrom<string.h>

strcpy(message, "bar");
于 2013-01-18T09:52:13.377 回答
0

你不能像这样改变字符数组。如果要更改字符数组的值,则必须通过修改单个字符来更改它,或者可以使用

strcpy(message,"bar");
于 2013-01-18T10:04:18.523 回答
0
char message[]="foo";

该语句使编译器创建 4 个字符变量的内存空间。该内存簇的起始地址是 的指针值message。address ofmessage是不可更改的,您不能更改它指向的地址。在这种情况下,您唯一的机会是更改指向的数据message

char* message="foo"

这时候会创建内存来存储指针的地址,所以message在执行过程中指针所在的地址可以改变。然后你可以安全地做message="bar"

于 2013-01-18T10:43:12.803 回答