谭浩强C语言书问题6

来源:百度知道 编辑:UC知道 时间:2024/09/22 03:58:36
书上例题:
#include <stdio.h>
#include <string.h>
void main()
{ struct student
{ long num;
char name[20];
char sex;
float score;
};
struct student stu_1;
struct student *p;
p=&stu_1;
stu_1.num=89101;
strcpy(stu_1.name,”Li Lin”);
stu_1.sex='M';
stu_1.score=89.5;
printf("No.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score);
printf("No.:%ld\nname:%s\nsex:%c\nscore:%f\n",(*p).num,(*p).name,(*p).sex,(*p).score);
}
现我将strcpy(stu_1.name,”Li Lin”);改为stu_1.name="Li Lin";
程序能否运行,如不能,请指出原因,谢谢
结构体成员不是可以赋值吗

这样该肯定不能运行
因为stu_1.name是数组
数组赋值必须是以单个元素的形式赋值
不能一个字符串一下子来
而strcpy是字符串赋值函数 专门做这个事情的
结构体成员当然可以赋值
但是这个成员的类型还是数组的类型
赋值还是要按照数组的方法来

stu_1.name是字符形变量啊
怎么可以把指针变量赋给它呢?!
要stu_1.name(n)=某一个字符。。
一个一个赋给name
明白吗?

strcpy(stu_1.name,”Li Lin”);
是指把Li Lin里的内容复制到stu_1.name中,改了当然不行啊

记得在我所以的张基温C中说到一句:不许将一组常量字符串直接赋值给一个结构体成员,,
对为什么吗,,,就用数组赋值原则去理解吧,,

现我将strcpy(stu_1.name,”Li Lin”);改为stu_1.name="Li Lin";

可以,不过只有一个情况.字符串在初定义时可以赋初值.如:
char str[20]="Li Lin";

struct student
{ long num;
char name[20]="china";
char sex;
float score;
};