我有:
char message1[100];
char message2[100];
Run Code Online (Sandbox Code Playgroud)
当我尝试做的时候message1 = message2
,我得到错误:
‘char[100]’
从类型分配类型时不兼容的类型‘char *’
我有类似的功能
if(send(clntSocket, echoBuffer, recvMsgSize, 0) != recvMsgSize){
DieWithError("send() failed")
}
Run Code Online (Sandbox Code Playgroud)
插图中.这些可能会以某种方式弄乱吗?:(
我有一种感觉,也许你不能=
对字符数组或其他东西做,但我环顾四周,找不到任何东西.
Car*_*rum 11
您不能在C中为数组变量赋值.这不是一个'可修改的左值'.根据规范,§6.3.2.1左值,数组和函数指示符:
的左值是与一个对象类型或比其他的不完整类型的表达式
void
; 如果左值在评估时未指定对象,则行为未定义.当一个对象被称为具有特定类型时,该类型由用于指定该对象的左值指定.甲修改的左值是不具有阵列型左值,不具有不完整的类型,不具有常量限定类型,并且如果它是一个结构或联合,没有任何构件(包括,递归,任何部件或具有const限定类型的所有包含聚合或联合的元素.
您得到的错误消息有点令人困惑,因为表达式右侧的数组在赋值之前衰减为指针.你所拥有的在语义上相当于:
message1 = &message2[0];
Run Code Online (Sandbox Code Playgroud)
哪个给出了右侧类型char *
,但由于你仍然无法分配任何东西message1
(它是一个数组,类型char[100]
),你得到了你看到的编译器错误.您可以使用memcpy(3)
以下方法解决问题:
memcpy(message1, message2, sizeof message2);
Run Code Online (Sandbox Code Playgroud)
如果你=
因为某种原因真的开始使用你的心脏,你可以在结构中使用使用数组......但这并不是一种推荐的方式.