#include <stdio.h>
#include <string.h>
struct student
{
long num;
char name[20];
float score[3];
};
void main()
{
void print(struct student *);
struct student stu;
stu.num=3021210;
stu.name[20]="Li Dong"; // ————>此处出错!
stu.score[0]=67.5;
stu.score[1]=89;
stu.score[2]=78.6;
print(&stu);
}
void print(struct student *p)
{
printf("%ld\n%s\n%f\n%f\n%f\n",p->num,p->name,p->score[0],p->score[1],p->score[2]);
printf("\n");
}
出错那行的原程序是strcpy(stu.name,"Li Dong");我把它改成stu.name[20]="Li Dong";想试下行不行,结果编译运行时出错了,之前看到字符串数组那一块看到这种赋值方法是可行的,为什么这里又不合法了呢?
还有stu.score那几个元素不能合并为stu.score[3]={xxx,xxx,xxx};
是我写的不对还是本身规定没有这种语法?
C语言为结构体中成员赋值出错是怎么回事
答案:2 悬赏:10
解决时间 2021-12-31 17:06
- 提问者网友:但未伤到心
- 2021-12-31 04:11
最佳答案
- 二级知识专家网友:颜值超标
- 2021-12-31 05:44
问题出在为字符数组赋值一个字符串时只能在初始化的时候
#include <stdio.h>
#include <string.h>
struct student
{
long num;
char name[20];
float score[3];
};
void main()
{
void print(struct student *);
struct student stu={3021210,"Li Dong",'67.5','89','78.6'};//初始化的时候
print(&stu);
}
void print(struct student *p)
{
printf("%ld\n%s\n%f\n%f\n%f\n",p->num,p->name,p->score[0],p->score[1],p->score[2]);
printf("\n");
}
#include <stdio.h>
#include <string.h>
struct student
{
long num;
char name[20];
float score[3];
};
void main()
{
void print(struct student *);
struct student stu={3021210,"Li Dong",'67.5','89','78.6'};//初始化的时候
print(&stu);
}
void print(struct student *p)
{
printf("%ld\n%s\n%f\n%f\n%f\n",p->num,p->name,p->score[0],p->score[1],p->score[2]);
printf("\n");
}
全部回答
- 1楼网友:星痕之殇
- 2021-12-31 06:49
首先这样编译会出错。
struct
{
char ch;
int pri;
}
定义结构体类型,后面没有跟分号,说明后面是该类型的变量列表,之后遇到pri接下来的空格后面跟的lpri编译器就不知道要干什么了。
如果用struct
{
char ch;
int pri;
};,还是出错,因为之后的pri没有声明或定义。
如果用struct pri
{
char ch;
int pri;
};,纯c的话不行,pri是结构体名而不是类型名,会编译出错。c++下会把pri当作struct pri,不会出错。
可以这么写:
typedef struct
{
char ch;
int pri;
}pri;
pri lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}};
pri rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
最后两行也可以这样写:
pri lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}},
rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
注意倒数第二行是分号还是逗号会影响初始化列表的语义。
(顺便,这个不是赋值。)
话说回来,一开始的写法去掉pri是正确的(只是定义之后无法访问该类型,一般不推荐):
struct
{
char ch;
int pri;
}
lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}},
rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
====
[原创回答团]
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯