将一个字符数组分配给另一个给出错误.为什么?

Sak*_*and 1 c arrays string pointers assignment-operator

数组的名称是指向第一个元素的指针.那么为什么一个字符数组不能分配另一个数组呢?

#include<stdio.h>
int main()
{
  char str1[]="Hello";
  char str2[10];
  char *s="Good Morning";
  char *q;
  str2=str1;  /* Error */
  q=s; /* Works */
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 7

首先,数组的名称是不一样的指针的第一个元素.在某些情况下,数组名称会衰减到指向第一个元素的指针,但通常它们不相同.

在那里遇到你的问题,数组名称不是可修改的左值,因此无法分配它们.

引用章节§6.3.2.1 C11,Lvalues ,数组和函数指示符

[...] 可修改的左值是一个左值,它没有数组类型,没有不完整的类型,没有const限定类型,如果是结构或联合,则没有任何成员(包括,递归地,所有包含聚合或联合的任何成员或元素)具有const限定类型.

对于赋值运算符,LHS应该是可修改的左值.

引用C11,第§6.5.16章,

赋值运算符应具有可修改的左值作为其左操作数.

在你的情况下,

 str2=str1;
Run Code Online (Sandbox Code Playgroud)

str2不是可修改的左值.因此,你得到错误.

FWIW,复制的内容,你可以使用strcpy()string.h头文件.