考虑以下代码。
char message[]="foo";
void main(void){
message[] = "bar";
}
为什么 MPLAB IDE v8.63 中存在语法错误?我只是想改变字符数组的值。
考虑以下代码。
char message[]="foo";
void main(void){
message[] = "bar";
}
为什么 MPLAB IDE v8.63 中存在语法错误?我只是想改变字符数组的值。
声明后不能使用这样的字符数组。如果要为字符数组分配新值,可以这样做:-
strcpy(message, "bar");
像这样的作业
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()。
您只能在声明 char 数组时的初始化中执行此操作
message[] = "bar";
你不能在你的代码中做到这一点
要修改它,您可以使用strcpy
from<string.h>
strcpy(message, "bar");
你不能像这样改变字符数组。如果要更改字符数组的值,则必须通过修改单个字符来更改它,或者可以使用
strcpy(message,"bar");
char message[]="foo";
该语句使编译器创建 4 个字符变量的内存空间。该内存簇的起始地址是 的指针值message
。address ofmessage
是不可更改的,您不能更改它指向的地址。在这种情况下,您唯一的机会是更改指向的数据message
。
char* message="foo"
这时候会创建内存来存储指针的地址,所以message
在执行过程中指针所在的地址可以改变。然后你可以安全地做message="bar"