求助!!!关于C里scanf %s %c和结构体之间的疑惑!!!

最近在编一个学生成绩管理系统,然后就发现了一个问题.....
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

4个回答

stunum分配的长度是多少,很可能是分配长度过短,结果越界访问到了sex字段。请保证至少分配字符串长度+1。以便存储字符串和结束的\0

qq_31320619
qq_31320619 这个不太清楚自已想吧
4 年多之前 回复
Shirley_Xiqi
Lemon-XQ 啊我看错了。。。谢谢你~
4 年多之前 回复
Shirley_Xiqi
Lemon-XQ 为什么是11啊……我觉得没越界啊……能解释一下么
4 年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 问题解决记得及时采纳,谢谢!
4 年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复Shirley_Xiqi: 那必然了,起码需要11
4 年多之前 回复
Shirley_Xiqi
Lemon-XQ 分配的长度是10.。。代码在下面
4 年多之前 回复

stunum的字符长度分配太短了,至少分配字符数+1,因为%s默认给添加了一个\0作为字符串的结尾。因为你这里的输入2015000000位10个字符,
因此长度至少要设置为11

结构体和普通字符应该是没有什么区别的啊。。。。你还是把代码贴出来吧。。。

Shirley_Xiqi
Lemon-XQ 嗯嗯我贴了
4 年多之前 回复

....
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);

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐