将一个字符数组分配给另一个字符数组会产生错误。为什么?
Assigning one character array to another gives Error. Why?
数组名是指向第一个元素的指针。那么为什么一个字符数组不能分配给另一个数组?
#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;
}
首先,数组的名称与指向第一个元素的指针不同。在某些情况下,数组名称会衰减到指向第一个元素的指针,但通常情况下,它们并不相同。
关于你的问题,数组名是不可修改的左值,所以不能赋值。
引用第 6.3.2.1 章 C11
、左值、数组和函数指示符
[...] A modifiable lvalue is an lvalue that
does not have array type, does not have an incomplete type, does not have a const-qualified
type, and if it is a structure or union, does not have any member (including,
recursively, any member or element of all contained aggregates or unions) with a const-qualified
type.
对于赋值运算符,LHS 应该是一个可修改的左值。
引用 C11
,章节 §6.5.16,
An assignment operator shall have a modifiable lvalue as its left operand.
在你的情况下,
str2=str1;
str2
不是可修改的左值。因此,您会收到错误消息。
FWIW,要复制内容,您可以使用 string.h
头文件中的 strcpy()
。
表达式中的数组自动转换为指向数组第一个元素的指针,sizeof
运算符和一元&
运算符的操作数除外,因此您不能分配给数组。
将 #include <string.h>
添加到代码的头部并使用 strcpy()
是复制字符串的好方法之一。
#include<stdio.h>
#include<string.h>
int main(void)
{
char str1[]="Hello";
char str2[10];
char *s="Good Morning";
char *q;
strcpy(str2, str1); /* Works */
q=s; /* Works */
return 0;
}
数组名是指向第一个元素的指针。那么为什么一个字符数组不能分配给另一个数组?
#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;
}
首先,数组的名称与指向第一个元素的指针不同。在某些情况下,数组名称会衰减到指向第一个元素的指针,但通常情况下,它们并不相同。
关于你的问题,数组名是不可修改的左值,所以不能赋值。
引用第 6.3.2.1 章 C11
、左值、数组和函数指示符
[...] A modifiable lvalue is an lvalue that does not have array type, does not have an incomplete type, does not have a const-qualified type, and if it is a structure or union, does not have any member (including, recursively, any member or element of all contained aggregates or unions) with a const-qualified type.
对于赋值运算符,LHS 应该是一个可修改的左值。
引用 C11
,章节 §6.5.16,
An assignment operator shall have a modifiable lvalue as its left operand.
在你的情况下,
str2=str1;
str2
不是可修改的左值。因此,您会收到错误消息。
FWIW,要复制内容,您可以使用 string.h
头文件中的 strcpy()
。
表达式中的数组自动转换为指向数组第一个元素的指针,sizeof
运算符和一元&
运算符的操作数除外,因此您不能分配给数组。
将 #include <string.h>
添加到代码的头部并使用 strcpy()
是复制字符串的好方法之一。
#include<stdio.h>
#include<string.h>
int main(void)
{
char str1[]="Hello";
char str2[10];
char *s="Good Morning";
char *q;
strcpy(str2, str1); /* Works */
q=s; /* Works */
return 0;
}