看板 C_and_CPP 關於我們 聯絡資訊
抱歉 再打擾一下 想請問一下為什麼程式正確執行之後 出現"請按任意鍵繼續" 按下去之後就出現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