无法修改char数组

new*_*bie 3 c arrays memory-management compiler-errors mplab

请考虑以下代码.

char message[]="foo";

void main(void){
    message[] = "bar";
}
Run Code Online (Sandbox Code Playgroud)

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

Yak*_*rov 8

像.这样的作业

message[] = "bar";
Run Code Online (Sandbox Code Playgroud)

要么

message = "bar";
Run Code Online (Sandbox Code Playgroud)

C.不支持

初始赋值的工作原理是它实际上是数组初始化伪装成赋值.编译器解释

char message[]="foo";
Run Code Online (Sandbox Code Playgroud)

char message[4] = {'f', 'o', 'o', '\0'};
Run Code Online (Sandbox Code Playgroud)

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

但是当你尝试时

message = "bar";
Run Code Online (Sandbox Code Playgroud)

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

message[0] = 'b';
message[1] = 'a';
Run Code Online (Sandbox Code Playgroud)

等,或(更好)使用为你做的库函数,如strcpy().


Roh*_*ain 5

声明后你不能使用这样的字符数组.如果要为字符数组指定新值,可以这样做: -

strcpy(message, "bar");
Run Code Online (Sandbox Code Playgroud)