Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
char array=char array的问题_C_Arrays_Char - Fatal编程技术网

char array=char array的问题

char array=char array的问题,c,arrays,char,C,Arrays,Char,我有: 当我尝试执行message1=message2时,出现错误: 从类型'char*' 我有这样的功能 char message1[100]; char message2[100]; 中间的。这些东西会把事情搞砸吗( 我有一种感觉,也许你不能对字符数组或其他什么做=,但我四处看了看,什么也找不到。你的怀疑是正确的。C(我假设这是C)将数组变量视为指针 您需要阅读有关数组和指针的C常见问题解答:您。它不是一个“可修改的左值”。根据规范,§6.3.2.1左值、数组和函数指示符: 左值是具有对象

我有:

当我尝试执行
message1=message2
时,出现错误:

从类型
'char*'

我有这样的功能

char message1[100];
char message2[100];
中间的。这些东西会把事情搞砸吗(


我有一种感觉,也许你不能对字符数组或其他什么做
=
,但我四处看了看,什么也找不到。

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

您需要阅读有关数组和指针的C常见问题解答:

您。它不是一个“可修改的左值”。根据规范,§6.3.2.1左值、数组和函数指示符

左值是具有对象类型或不完整类型的表达式,而不是
void
;如果左值在求值时未指定对象,则行为未定义。当对象被称为具有特定类型时,类型由用于指定对象的左值指定。可修改的左值是不具有数组类型、不具有不完整类型、不具有常量限定类型,并且如果是结构或联合,则不具有任何具有常量限定类型的成员(递归地包括所有包含的聚合或联合的任何成员或元素)

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

if(send(clntSocket, echoBuffer, recvMsgSize, 0) != recvMsgSize){
   DieWithError("send() failed")
}
它给出了右边的类型
char*
,但由于您仍然无法将任何内容分配给
message1
(它是一个数组,类型为
char[100]
),因此您会看到编译器错误。您可以使用以下方法解决问题:


如果你真的有决心使用<代码>=/COD>某些原因,你可以在结构内部使用数组……但这不是一个推荐的方法,但是,

你使用C++编译器吗?更确切地说,是数组类型的表达式(比如数组变量的名称)在大多数上下文中,隐式转换为指向数组对象的第一个元素的指针。但是+1引用了常见问题解答中我最喜欢的部分。
message1 = &message2[0];
memcpy(message1, message2, sizeof message2);