char*给char[]赋值----错误

i-neojos 2013-05-30 08:07:30
声明了一个类People,属性有char name[20];
然后在构造函数中
People(char * name){
this->name=name;
}
出错的理由是给常量赋值。那位高手讲解一下原因,能深入分析一下更好啦
...全文
1876 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
明月照松雪 2015-05-28
  • 打赏
  • 举报
回复
引用 5 楼 super_admi 的回复:
我记得某书是用盒子比喻指针,我也试试看。 1.有一个密封的盒子,叫Pepole.name,它恒定有20个格子,每个格子有一张纸条,这些纸条上写着一个位置,传说这些位置上也有盒子,并且这些盒子可以存放一个叫char的珠宝; 2.有一个不密封的盒子,叫name,他没有固定个数的格子,但里面也有很多纸条,同样这些纸条上写着位置,传说这些位置上也有盒子,这些盒子里放着许多有用的宝石(中世纪魔法宝石?); 3.魔法师叫学徒将2中的宝石复制一份放到1中的盒子里去(1中盒子里的珠宝自然就扔掉了),但学徒不解其意,企图将name这个盒子里的纸条,放到叫Pepole.name中去,结果,那个盒子是密封的,魔法无效……所以楼主束手无策。
比喻挺有意思的,不知道是哪本书上的
赵4老师 2013-06-07
  • 打赏
  • 举报
回复
引用 23 楼 YiRan_FanPeiXi11 的回复:
C/C++ code People(char * name){ strcpy(this->name, name); //数组不能直接赋值。。用strcpy。。 } 12楼正解
8楼才是正解呐!
People people("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
试试看!
i-neojos 2013-06-07
  • 打赏
  • 举报
回复
原来C++的世界,并不孤单。
依然_范佩西11 2013-05-31
  • 打赏
  • 举报
回复
C/C++ code People(char * name){ strcpy(this->name, name); //数组不能直接赋值。。用strcpy。。 } 12楼正解
SKATE11 2013-05-30
  • 打赏
  • 举报
回复
this->name是不是数组名啊 那样是不行的 它只是一个常量 用楼上说的方法吧
Eleven 2013-05-30
  • 打赏
  • 举报
回复
memcpy()
bourbon1795 2013-05-30
  • 打赏
  • 举报
回复
strcpy() 或者memcpy() 记得判断name的长度
失散糖 2013-05-30
  • 打赏
  • 举报
回复
引用 5 楼 super_admi 的回复:
我记得某书是用盒子比喻指针,我也试试看。 1.有一个密封的盒子,叫Pepole.name,它恒定有20个格子,每个格子有一张纸条,这些纸条上写着一个位置,传说这些位置上也有盒子,并且这些盒子可以存放一个叫char的珠宝; 2.有一个不密封的盒子,叫name,他没有固定个数的格子,但里面也有很多纸条,同样这些纸条上写着位置,传说这些位置上也有盒子,这些盒子里放着许多有用的宝石(中世纪魔法宝石?); 3.魔法师叫学徒将2中的宝石复制一份放到1中的盒子里去(1中盒子里的珠宝自然就扔掉了),但学徒不解其意,企图将name这个盒子里的纸条,放到叫Pepole.name中去,结果,那个盒子是密封的,魔法无效……所以楼主束手无策。
数组名作为成员变量,拥有魔法免疫和抗性皮肤等技能,只能使用物理攻击或是化学攻击什么的
赵4老师 2013-05-30
  • 打赏
  • 举报
回复
string用= char []用strcpy且最好用strncpy 声明了一个类People,属性有char name[20]; 然后在构造函数中 People(char * name){ strncpy(this->name,name,19);(this->name)[19]=0; }
u010899436 2013-05-30
  • 打赏
  • 举报
回复
数组不能给变量赋值,数组是存储数据的容器
自信男孩 2013-05-30
  • 打赏
  • 举报
回复
People(char * name){
    this->name=name;
}
主要是People的属性是char name[],而不是指针char *name,所以this->name = ??其实是向数组赋值,有一点需要注意,数组是不可以作为左值的。所以,若People的属性是char name[],是不可以直接赋值的。你可以通过strcpy/strncpy/memcpy等函数替换上面的这条语句:this->name = name;
dos5gw 2013-05-30
  • 打赏
  • 举报
回复
this->name=name;相当于改变了数组name[]的首地址, 在C里, 数组一旦定义, 其起始地址不可改变
我看你有戏 2013-05-30
  • 打赏
  • 举报
回复
刚开始学的时候感觉这样应该可以,其实不行的,memcpy吧,看下这个函数
仙境之桥2046 2013-05-30
  • 打赏
  • 举报
回复
情何以堪。。。。。
super_admi 2013-05-30
  • 打赏
  • 举报
回复
我记得某书是用盒子比喻指针,我也试试看。 1.有一个密封的盒子,叫Pepole.name,它恒定有20个格子,每个格子有一张纸条,这些纸条上写着一个位置,传说这些位置上也有盒子,并且这些盒子可以存放一个叫char的珠宝; 2.有一个不密封的盒子,叫name,他没有固定个数的格子,但里面也有很多纸条,同样这些纸条上写着位置,传说这些位置上也有盒子,这些盒子里放着许多有用的宝石(中世纪魔法宝石?); 3.魔法师叫学徒将2中的宝石复制一份放到1中的盒子里去(1中盒子里的珠宝自然就扔掉了),但学徒不解其意,企图将name这个盒子里的纸条,放到叫Pepole.name中去,结果,那个盒子是密封的,魔法无效……所以楼主束手无策。
DaiwjDev 2013-05-30
  • 打赏
  • 举报
回复
Shana2013 2013-05-30
  • 打赏
  • 举报
回复
数组名被看成常量,不能直接赋值
mujiok2003 2013-05-30
  • 打赏
  • 举报
回复
复习一下数组先。
mujiok2003 2013-05-30
  • 打赏
  • 举报
回复
数组不能整体赋值,请使用strcpy或者memcpy
天才2012 2013-05-30
  • 打赏
  • 举报
回复
内存的操作,的确用cpy比较好点
加载更多回复(6)

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧