Re: [問題] scanf 讀取輸入字串的問題

看板C_and_CPP (C/C++)作者 (PPP)時間16年前 (2009/04/28 11:56), 編輯推噓2(2011)
留言13則, 3人參與, 最新討論串2/2 (看更多)
抱歉 再打擾一下 想請問一下為什麼程式正確執行之後 出現"請按任意鍵繼續" 按下去之後就出現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

04/28 12:00, , 1F
我丟到Dev-C++執行沒有問題得說XD
04/28 12:00, 1F

04/28 12:38, , 2F
char str1[]=""; 這樣str1實際只有一個char的空間....
04/28 12:38, 2F

04/28 12:38, , 3F
(因為str1 init成""所以最終只有一個str[0]='\0'而已
04/28 12:38, 3F

04/28 12:39, , 4F
你fgets既然給了80當上限, str1[]就至少要開80才行....
04/28 12:39, 4F

04/28 12:40, , 5F
(忘了含'\0'是80還是81??) 反正會fgets輸入所以不給初值
04/28 12:40, 5F

04/28 12:40, , 6F
應該還好, care的話就寫char str1[80] = ""; 試試:)
04/28 12:40, 6F

04/28 13:11, , 7F
補充一下, 為什麼可以執行, 但出現任意鍵繼續後才掛掉.
04/28 13:11, 7F

04/28 13:11, , 8F
因為區域變數放在stack區, function call stack也在
04/28 13:11, 8F

04/28 13:12, , 9F
stack(好饒舌, 就是memory的stack區啦Orz), 所以你的輸
04/28 13:12, 9F

04/28 13:12, , 10F
入因為沒有足夠的空間存放, 可能就覆寫到function的
04/28 13:12, 10F

04/28 13:13, , 11F
return address, 所以跑到最後要return了就跳到某不知
04/28 13:13, 11F

04/28 13:13, , 12F
名位置了; 印象中是這樣, 有錯還麻煩大家指正一下:)
04/28 13:13, 12F

04/28 14:13, , 13F
謝謝Victor你的回答 :)
04/28 14:13, 13F
文章代碼(AID): #19zdw6mh (C_and_CPP)
文章代碼(AID): #19zdw6mh (C_and_CPP)