怎样赋值struct中的char[20]数组??我想其中一定有原因,就是看了半天看不出来
前辈帮忙看看吧!
void test_struct(){
struct person{
int no;
char name[20];
char *add;
int age;
};
struct person John;
John.no=1;
John.name="John";//用vc6编译出出错
//error C2106: '=' : left operand must be l-value
//}
在初始化时可以赋值,或者用scanf("%s",John.name);也可以赋值成功
有谁可以说一下为何
Jhon.name="John";
为何不行吗?我想其中一定有原因,就是看了半天看不出来
问题点数:20、回复次数:7Top
1 楼llf_hust()回复于 2005-09-03 23:11:37 得分 5
Jhon.name="John";
为何不行吗?我想其中一定有原因,就是看了半天看不出来
//改为
strcpy(Jhon.name, "John");
就可以了Top
2 楼wanguodu(足文字D)回复于 2005-09-03 23:30:52 得分 10
其实道理很简单,数组名不是一个变量——你可以把它看作是一个常数,不占用存储,因此不能用来赋值;但这并不妨碍它作为一个实参(比如在调用strcpy时),因为你知道常数是可以作为参数传递的。Top
3 楼newegg2002(同志们,同胞们,大学的四年,是扎实基础的四年!!)回复于 2005-09-04 00:24:27 得分 1
字符串赋值用strcpy吧...
安全方便....对于你这种情况.还可以这样以防止内存泄露:
strncpy(Jhon.name, yourSourceString,20);Top
4 楼newegg2002(同志们,同胞们,大学的四年,是扎实基础的四年!!)回复于 2005-09-04 00:25:03 得分 2
这样最多只能拷贝20个字符...Top
5 楼caigua(菜瓜)回复于 2005-09-04 08:50:25 得分 0
哦,明白了,是我没有搞清楚
本来char name[20]="John";可以成立,
我还以为name[20]="John";也可以成立
现在试验了一下不行,那我就明白了,本来还以为在struct的成员赋值出现了问题
原来不行,只有初始化的时候可以那样赋值。
谢谢前辈了
Top
6 楼csdolauli(1937年的爱情)回复于 2005-09-04 10:32:18 得分 1
数组名市常量Top
7 楼lzp729(lzp729)回复于 2005-09-04 10:45:37 得分 1
“数组名市常量”
这个是对的呀Top




