我有:
char message1[100];
char message2[100];
当我尝试message1 = message2
时,我收到错误:
从类型‘char[100]’
分配类型‘char *’
时,不兼容的类型
我有像
这样的功能if(send(clntSocket, echoBuffer, recvMsgSize, 0) != recvMsgSize){
DieWithError("send() failed")
}
其间。这些可能会以某种方式弄乱吗? :(
我有一种感觉,也许你不能在char数组或其他东西上做=
,但我环顾四周,找不到任何东西。
答案 0 :(得分:11)
你can't assign anything to an array variable in C。这不是一个'可修改的左值'。根据规范,§6.3.2.1左值,数组和函数指示符:
左值是具有对象类型或不完整类型的表达式,而不是
void
;如果左值在评估时未指定对象,则行为未定义。当一个对象被称为具有特定类型时,该类型由用于指定该对象的左值指定。 可修改的左值是一个左值,它没有数组类型,没有不完整的类型,没有const限定类型,如果是结构或联合,则没有任何成员(包括,递归地,所有包含的聚合或联合的任何成员或元素)具有const限定类型。
您获得的错误消息有点令人困惑,因为表达式右侧的数组在赋值之前衰减为指针。你所拥有的在语义上等同于:
message1 = &message2[0];
哪个给出了右侧类型char *
,但由于您仍然无法为message1
分配任何内容(它是一个数组,键入char[100]
),您将收到编译器错误你明白了您可以使用memcpy(3)
:
memcpy(message1, message2, sizeof message2);
如果由于某种原因你真的开始使用=
,那么你可以在结构中使用use数组......但这并不是推荐的方法。
答案 1 :(得分:1)
你的怀疑是正确的。 C(我假设这是C)将数组变量视为指针。
您需要阅读有关数组和指针的C FAQ:http://c-faq.com/aryptr/index.html