char array = char数组的问题

时间:2011-09-25 20:33:20

标签: c arrays char

我有:

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

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

  从类型‘char[100]’

分配类型‘char *’时,

不兼容的类型

我有像

这样的功能
if(send(clntSocket, echoBuffer, recvMsgSize, 0) != recvMsgSize){
   DieWithError("send() failed")
}

其间。这些可能会以某种方式弄乱吗? :(

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

2 个答案:

答案 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