error C2440:"=":无法从"char *"转换为"char [30]"

#include<iostream>usingnamespacestd;structcandybar{charname[30];doubleweight;intcalor... # include <iostream>
using namespace std;
struct candybar{
char name[30];
double weight;
int calorie;
};
void equal(candybar & get,char * str="MyName",double wei=3.2,int cal=352);
void display(const candybar & got);
int main()
{
candybar mybar;
equal(mybar);
display(mybar);
return 0;
}
void equal(candybar & get,char * str,double wei,int cal)
{
get.name=str;
get.weight=wei;
get.calorie=cal;
}
void display(const candybar & got)
{
cout << got.name<<endl
<< got.weight<<endl
<<got.calorie<<endl;
}
错误补充说明:error C2440:"=":无法从"char *"转换为"char [30]"
没有转换为数组类型,但有转换为数组的引用或指针.但是我把第四句修改成:char * name;就可以运行了,这是为什么?数组name[30]的地址就是name啊?
展开
 我来答
心中风情4
推荐于2017-09-13 · TA获得超过2247个赞
知道大有可为答主
回答量:1779
采纳率:66%
帮助的人:1083万
展开全部
在C语言中数组是不容许整体复制的!
故:
get.name=str;

这样是不正确的;
表明上看这句话只是把一个地址给他,实际上要求的是数组的整体复制。
因为数组的地址是const的,不能改变。数组是可以当指针用,但只能是const 指针。
左手烟雨
2010-03-26 · TA获得超过785个赞
知道小有建树答主
回答量:446
采纳率:100%
帮助的人:250万
展开全部
两种解决方法:
1、把char name[30]修改为char* name;
2、把equal函数中的 get.name=str;修改为 strcpy(get.name, str);
之所以报错,是因为这里你将char *str赋值给数组 name[30]了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-03-26
展开全部
equal()函数中的

get.name=str;

应改为用字符串复制函数将str字符串复制到get.name字符数组中,而不是试图将get.name指向str,这是不允许的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
牛顿一餐一顿牛
2010-03-26 · TA获得超过638个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:218万
展开全部
name是一固定地址为常量,不能将str的地址赋给一常量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
baqktdgt
2010-03-26 · TA获得超过474个赞
知道小有建树答主
回答量:237
采纳率:0%
帮助的人:239万
展开全部
用strncpy来拷贝
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式