作者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
推 Peruheru:我丟到Dev-C++執行沒有問題得說XD 04/28 12:00
→ VictorTom:char str1[]=""; 這樣str1實際只有一個char的空間.... 04/28 12:38
→ VictorTom:(因為str1 init成""所以最終只有一個str[0]='\0'而已 04/28 12:38
→ VictorTom:你fgets既然給了80當上限, str1[]就至少要開80才行.... 04/28 12:39
→ VictorTom:(忘了含'\0'是80還是81??) 反正會fgets輸入所以不給初值 04/28 12:40
→ VictorTom:應該還好, care的話就寫char str1[80] = ""; 試試:) 04/28 12:40
推 VictorTom:補充一下, 為什麼可以執行, 但出現任意鍵繼續後才掛掉. 04/28 13:11
→ VictorTom:因為區域變數放在stack區, function call stack也在 04/28 13:11
→ VictorTom:stack(好饒舌, 就是memory的stack區啦Orz), 所以你的輸 04/28 13:12
→ VictorTom:入因為沒有足夠的空間存放, 可能就覆寫到function的 04/28 13:12
→ VictorTom:return address, 所以跑到最後要return了就跳到某不知 04/28 13:13
→ VictorTom:名位置了; 印象中是這樣, 有錯還麻煩大家指正一下:) 04/28 13:13
→ tohru:謝謝Victor你的回答 :) 04/28 14:13