2 shirley xiqi Shirley_Xiqi 于 2016.03.31 21:49 提问

求助!!!关于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个回答

caozhy
caozhy   Ds   Rxr 2016.03.31 23:24
已采纳

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

qq_31320619
qq_31320619 这个不太清楚自已想吧
一年多之前 回复
Shirley_Xiqi
Shirley_Xiqi 啊我看错了。。。谢谢你~
一年多之前 回复
Shirley_Xiqi
Shirley_Xiqi 为什么是11啊……我觉得没越界啊……能解释一下么
一年多之前 回复
caozhy
caozhy 问题解决记得及时采纳,谢谢!
一年多之前 回复
caozhy
caozhy 回复Shirley_Xiqi: 那必然了,起码需要11
一年多之前 回复
Shirley_Xiqi
Shirley_Xiqi 分配的长度是10.。。代码在下面
一年多之前 回复
u010395948
u010395948   2016.04.02 12:00

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

Shirley_Xiqi
Shirley_Xiqi   2016.04.01 00:06

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

}

u010395948
u010395948   2016.03.31 22:47

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

Shirley_Xiqi
Shirley_Xiqi 嗯嗯我贴了
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!