char array = char数组的问题

我有:

char message1[100]; char message2[100]; 

当我尝试执行message1 = message2 ,我收到错误:

从类型'char *'分配类型'char[100]'时不兼容的类型

我有类似的function

 if(send(clntSocket, echoBuffer, recvMsgSize, 0) != recvMsgSize){ DieWithError("send() failed") } 

插图中。 这些可能会以某种方式弄乱吗? 🙁

我有一种感觉,也许你不能做char数组或其他东西,但我环顾四周,找不到任何东西。

你的怀疑是正确的。 C(我假设这是C)将数组变量视为指针。

您需要阅读有关数组和指针的C FAQ: http : //c-faq.com/aryptr/index.html

您无法在C中为数组变量赋值 。 这不是一个’可修改的左值’。 根据规范, §6.3.2.1左值,数组和函数指示符

左值是具有对象类型或除void之外的不完整类型的表达式; 如果左值在评估时未指定对象,则行为未定义。 当一个对象被称为具有特定类型时,该类型由用于指定该对象的左值指定。 可修改的左值是一个左值,它没有数组类型,没有不完整的类型,没有const限定类型,如果是结构或联合,则没有任何成员(包括,递归地,任何成员)或具有const限定类型的所有包含的聚合或联合的元素。

您得到的错误消息有点令人困惑,因为表达式右侧的数组在赋值之前衰减为指针。 你所拥有的在语义上相当于:

 message1 = &message2[0]; 

它给出了右侧类型char * ,但由于你仍然无法为message1分配任何东西(它是一个数组,键入char[100] ),你得到的编译器错误就是你看到的。 您可以使用memcpy(3)解决您的问题:

 memcpy(message1, message2, sizeof message2); 

如果你真的因为某种原因设置了你的心脏,你可以在结构中使用use数组……但这并不是一种真正推荐的方法。