作者tohru (PPP)
看板C_and_CPP
标题Re: [问题] scanf 读取输入字串的问题
时间Tue Apr 28 11:56:53 2009
抱歉 再打扰一下
想请问一下为什麽程式正确执行之後
出现"请按任意键继续"
按下去之後就出现microsoft的错误讯息呢
gdb出现的讯息是segmentation fault
想请问一下是哪边有问题呢?
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str1[]="";
int comp_grade=0, math_grade=0, eng_grade=0;
printf("请输入姓名: ");
fgets(str1,80,stdin);
printf("请输入计概成绩: ");
scanf("%d", &comp_grade);
printf("请输入数学成绩: ");
scanf("%d", &math_grade);
printf("请输入英文成绩: ");
scanf("%d", &eng_grade);
printf("统计中.....\n\n");
printf("%s的成绩如下\n", str1);
printf("========================\n");
printf("计概成绩: %d\n", comp_grade);
printf("数学成绩: %d\n", math_grade);
printf("英文成绩: %d\n", eng_grade);
printf("========================\n");
system("pause");
return 0;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.243.66
1F:推 Peruheru:我丢到Dev-C++执行没有问题得说XD 04/28 12:00
2F:→ VictorTom:char str1[]=""; 这样str1实际只有一个char的空间.... 04/28 12:38
3F:→ VictorTom:(因为str1 init成""所以最终只有一个str[0]='\0'而已 04/28 12:38
4F:→ VictorTom:你fgets既然给了80当上限, str1[]就至少要开80才行.... 04/28 12:39
5F:→ VictorTom:(忘了含'\0'是80还是81??) 反正会fgets输入所以不给初值 04/28 12:40
6F:→ VictorTom:应该还好, care的话就写char str1[80] = ""; 试试:) 04/28 12:40
7F:推 VictorTom:补充一下, 为什麽可以执行, 但出现任意键继续後才挂掉. 04/28 13:11
8F:→ VictorTom:因为区域变数放在stack区, function call stack也在 04/28 13:11
9F:→ VictorTom:stack(好饶舌, 就是memory的stack区啦Orz), 所以你的输 04/28 13:12
10F:→ VictorTom:入因为没有足够的空间存放, 可能就覆写到function的 04/28 13:12
11F:→ VictorTom:return address, 所以跑到最後要return了就跳到某不知 04/28 13:13
12F:→ VictorTom:名位置了; 印象中是这样, 有错还麻烦大家指正一下:) 04/28 13:13
13F:→ tohru:谢谢Victor你的回答 :) 04/28 14:13