请考虑以下代码。
char message[]="foo";
void main(void){
message[] = "bar";
}
为什么MPLAB IDE v8.63中存在语法错误?我只是想改变字符数组的值。
答案 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"