最近在编一个学生成绩管理系统,然后就发现了一个问题.....
scanf("%s %s %c ",name,stunum,&sex);
在运行时输入Xiaoming 2015000000 F
输出的stunum是2015000000, sex是F
但是把语句改成
scanf("%s %s %c ",student[0].name,student[0].stunum,&student[0].sex);
输入和上面一样的东西,输出却变成了stunum是2015000000F,sex还是F
为什么啊?不明白TAT
难道结构体里的字符串和普通字符串不一样么
求高手拯救我这个小白orz
stunum分配的长度是多少,很可能是分配长度过短,结果越界访问到了sex字段。请保证至少分配字符串长度+1。以便存储字符串和结束的\0
结构体和普通字符应该是没有什么区别的啊。。。。你还是把代码贴出来吧。。。
....
struct information
{
char name[10],stunum[10];
char sex;
int grade[6],total;
}student[10]={0};
....
void input() //输入信息模块
{
system("cls");
int i,j;
printf(" 姓名 \t学号\t性别 高数 大语 英语 C语言 大物 体育\n");
for(i=0;i<10;i++)
{
//输入Xiaoming 2015000000 F 87 88 86 93 79 85
scanf("%s %s %c",student[i].name,student[i].stunum,&student[i].sex);
for(j=0;j<6;j++)
{
scanf("%d",&student[i].grade[j]);
}
printf("\n");
}
printf("\n%c",student[0].sex);
printf("\n%s",student[0].stunum);
}
stunum的字符长度分配太短了,至少分配字符数+1,因为%s默认给添加了一个\0作为字符串的结尾。因为你这里的输入2015000000位10个字符,
因此长度至少要设置为11