无法修改char数组

时间:2013-01-18 09:48:12

标签: c arrays memory-management compiler-errors mplab

请考虑以下代码。

char message[]="foo";

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

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

4 个答案:

答案 0 :(得分:8)

这样的作业
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()。

答案 1 :(得分:5)

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

strcpy(message, "bar");

答案 2 :(得分:1)

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

message[] = "bar";

您无法在代码中执行此操作

要修改它,您可以使用strcpy

中的<string.h>
strcpy(message, "bar");

答案 3 :(得分:0)

char message[]="foo";

此语句使编译器创建4 char变量的内存空间。此内存集群的起始地址是message的指针值。 message的地址不可更改,您无法更改其指向的地址。在这种情况下,您唯一的机会是更改message指向的数据。

char* message="foo"

此时,创建内存以存储指针的地址,因此message点在执行期间可以更改的地址。然后你可以放心地message="bar"