char array = char数组的问题

use*_*070 4 c arrays char

我有:

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)

如果你=因为某种原因真的开始使用你的心脏,你可以在结构中使用使用数组......但这并不是一种推荐的方式.


P.T*_*.T. 2

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

您需要阅读有关数组和指针的 C 常见问题解答:http://c-faq.com/aryptr/index.html