c语言char数组赋值提示 error: assignment to expression with array type

一、原因

一、解决办法

关于这个赋值失败提示 error: assignment to expression with array type,是我在写链表时给结构体赋值发现的,编译的时候提示了这个:

在这里插入图片描述

原因:
(1)数组不能直接给数组赋值
(2)指针不能直接给数组赋值

如下是几种常见的指针与数组间的赋值问题:

char a[] = {'a','b','c'};
char b[3];

>char  c[3]  = a;	//错误---》数组不能直接给数组赋值
char  d[3] 	= p;	//错误---》指针不能直接给数组赋值
char *p  = a;	//正确赋值,数组名为数组首元素地址,因此可使用指针保存该地址(指针只能保存地址)
strcpy(b,a);	//正确,使用标准库函数可实现字符串拷贝
char **p1 = &p;	//正确,二级指针可接收一级指针的地址


解决办法:

在这个地方可以使用strcpy()/strncpy这个函数把一个地址上的数据复制到另一个地址上去

函数原型:

#include <string.h>

char *strcpy(char *dest, const char *src);
用法:把src这个地址的地址的字符串赋值到dest这个地址去

char *strncpy(char *dest, const char *src, size_t n);
用法:把src这个地址的地址的n个字符串赋值到dest这个地址去

  • 47
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误提示是因为你试图将一个数组类型的表达式赋值给一个变量。在C语言中,数组是一种特殊的数据类型,它们不能像普通变量一样直接赋值。如果你想给数组赋值,需要使用循环或者数组初始化语法来逐个赋值。 例如,下面的代码会导致这个错误: ``` int arr[5]; arr = {1, 2, 3, 4, 5}; // 错误:不能将数组赋值给表达式 ``` 正确的做法是使用循环或者数组初始化语法: ``` int arr[5]; for (int i = ; i < 5; i++) { arr[i] = i + 1; } // 或者使用数组初始化语法 int arr[5] = {1, 2, 3, 4, 5}; ``` ### 回答2: 该错误指的是将一个数组类型的表达式赋值给一个变量,这是不合法的。 在C语言中,数组是一组相同类型的元素的集合,这些元素在内存中是连续存储的。而表达式则是可以求值的计算式。当我们将一个数组类型的表达式进行赋值时,就会发生上述错误。 例如,如果有一个整型数组a,我们不能将它作为一个整型类型的变量来赋值,如下所示: int a[5] = {1, 2, 3, 4, 5}; int b = a; // 错误:assignment to expression with array type 需要注意的是,可以将数组名作为一个指向数组首元素的指针来进行赋值。如下所示: int a[5] = {1, 2, 3, 4, 5}; int *b = a; // 正确,b指向数组a的首元素 此外,在函数调用中也容易出现该错误。当我们使用一个数组名作为函数的参数时,该数组名将被转换为指向数组首元素的指针。但是在函数中,我们不能直接将这个指针赋值给一个数组类型的变量,否则也会出现上述错误。 总之,在C语言中,应该始终记住数组和指针的区别,避免在程序中出现上述错误。 ### 回答3: 这个错误消息意味着你正在尝试给一个数组表达式赋值,而数组不是一个可被赋值的对象。这通常是由于数学运算符被错误地用于数组上,或者由于尝试使用赋值运算符在数组上进行修改所导致的。 例如,以下代码会导致“assignment to expression with array type”错误: int arr[5]; arr = {1, 2, 3, 4, 5}; // 尝试用花括号形式对数组进行赋值 另一个例子是以下代码会导致同样的错误: int arr1[5], arr2[5]; arr1 = arr2; // 尝试将一个数组赋值给另一个数组 要解决这个错误,需要检查代码中的语法错误或逻辑错误,并确保没有使用运算符来处理数组。如果你需要将一个数组的值复制到另一个数组,可以使用一个循环来逐个复制每一个元素。例如: int arr1[5], arr2[5]; for(int i=0; i<5; i++) { arr1[i] = arr2[i]; } 总之,要避免错误消息“assignment to expression with array type ”,你应该记住,数组不能直接进行赋值,只能使用循环逐个赋值

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值