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

C++语言 码拜 10年前 (2015-05-11) 4063次浏览 0个评论

声明了一个类People,属性有char name[20];
然后在构造函数中
People(char * name){
    this->name=name;
}
出错的理由是给常量赋值。那位高手讲解一下原因,能深入分析一下更好啦

1分
数组不能整体赋值,请使用strcpy或者memcpy
复习一下数组先。
10分
数组名被看成常量,不能直接赋值
5分
我记得某书是用盒子比喻指针,我也试试看。

1.有一个密封的盒子,叫Pepole.name,它恒定有20个格子,每个格子有一张纸条,这些纸条上写着一个位置,传说这些位置上也有盒子,并且这些盒子可以存放一个叫char的珠宝;

2.有一个不密封的盒子,叫name,他没有固定个数的格子,但里面也有很多纸条,同样这些纸条上写着位置,传说这些位置上也有盒子,这些盒子里放着许多有用的宝石(中世纪魔法宝石?);

3.魔法师叫学徒将2中的宝石复制一份放到1中的盒子里去(1中盒子里的珠宝自然就扔掉了),但学徒不解其意,企图将name这个盒子里的纸条,放到叫Pepole.name中去,结果,那个盒子是密封的,魔法无效……所以楼主束手无策。

刚开始学的时候感觉这样应该可以,其实不行的,memcpy吧,看下这个函数
People(char * name){
    this->name=name;
}

主要是People的属性是char name[],而不是指针char *name,所以this->name = ??其实是向数组赋值,有一点需要注意,数组是不可以作为左值的。所以,若People的属性是char name[],是不可以直接赋值的。你可以通过strcpy/strncpy/memcpy等函数替换上面的这条语句:this->name = name;

string用=
char []用strcpy且最好用strncpy

声明了一个类People,属性有char name[20];
 然后在构造函数中
 People(char * name){
     strncpy(this->name,name,19);(this->name)[19]=0;
 }

memcpy()
this->name是不是数组名啊  那样是不行的  它只是一个常量  用楼上说的方法吧
1分
this->name其实是一个地址,你再给地址赋值,肯定是错的,只能去给这个地址放内容。
2分
People(char * name){
    strcpy(this->name, name); //数组不能直接赋值。。用strcpy。。
}
基础知识都没掌握好啊
引用 1 楼 mujiok2003 的回复:

数组不能整体赋值,请使用strcpy或者memcpy

3分
引用 8 楼 zhao4zhong1 的回复:

string用=
char []用strcpy且最好用strncpy

声明了一个类People,属性有char name[20];
 然后在构造函数中
 People(char * name){
     strncpy(this->name,name,19);(this->name)[19]=0;
 }

正解!
用strcpy用越界访问的风险。

2分
用strcpy有越界访问的风险。
内存的操作,的确用cpy比较好点
情何以堪。。。。。
2分
this->name=name;相当于改变了数组name[]的首地址,
在C里, 数组一旦定义, 其起始地址不可改变
5分
数组不能给变量赋值,数组是存储数据的容器
2分
引用 5 楼 super_admi 的回复:

我记得某书是用盒子比喻指针,我也试试看。

1.有一个密封的盒子,叫Pepole.name,它恒定有20个格子,每个格子有一张纸条,这些纸条上写着一个位置,传说这些位置上也有盒子,并且这些盒子可以存放一个叫char的珠宝;

2.有一个不密封的盒子,叫name,他没有固定个数的格子,但里面也有很多纸条,同样这些纸条上写着位置,传说这些位置上也有盒子,这些盒子里放着许多有用的宝石(中世纪魔法宝石?);

3.魔法师叫学徒将2中的宝石复制一份放到1中的盒子里去(1中盒子里的珠宝自然就扔掉了),但学徒不解其意,企图将name这个盒子里的纸条,放到叫Pepole.name中去,结果,那个盒子是密封的,魔法无效……所以楼主束手无策。

数组名作为成员变量,拥有魔法免疫和抗性皮肤等技能,只能使用物理攻击或是化学攻击什么的

5分
strcpy() 或者memcpy()
记得判断name的长度
2分
C/C++ code

People(char * name){
    strcpy(this->name, name); //数组不能直接赋值。。用strcpy。。
}

12楼正解

原来C++的世界,并不孤单。
引用 23 楼 YiRan_FanPeiXi11 的回复:

C/C++ code

People(char * name){
    strcpy(this->name, name); //数组不能直接赋值。。用strcpy。。
}

12楼正解

8楼才是正解呐!

People people("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");

试试看!

引用 5 楼 super_admi 的回复:

我记得某书是用盒子比喻指针,我也试试看。

1.有一个密封的盒子,叫Pepole.name,它恒定有20个格子,每个格子有一张纸条,这些纸条上写着一个位置,传说这些位置上也有盒子,并且这些盒子可以存放一个叫char的珠宝;

2.有一个不密封的盒子,叫name,他没有固定个数的格子,但里面也有很多纸条,同样这些纸条上写着位置,传说这些位置上也有盒子,这些盒子里放着许多有用的宝石(中世纪魔法宝石?);

3.魔法师叫学徒将2中的宝石复制一份放到1中的盒子里去(1中盒子里的珠宝自然就扔掉了),但学徒不解其意,企图将name这个盒子里的纸条,放到叫Pepole.name中去,结果,那个盒子是密封的,魔法无效……所以楼主束手无策。

比喻挺有意思的,不知道是哪本书上的


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明char*给char[]赋值—-错误
喜欢 (2)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!