讀字串檔案的奇怪問題? |
答題得分者是:blk5743
|
hornacek
一般會員 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
FILE *input; int index = 0; if ((input = fopen("test.txt", "rt")) != NULL) { char strs[10][256]; while (fscanf(input, "%s", strs[index]) != EOF && index < 10) { index = index 1; } fclose(input); } test.txt 的內容 AA BB CC DD EE FF GG HH II JJ KK LL MM NN OO PP QQ若我的檔案字串個數超過10,index最後應該會等於10,但我卻得到index等於45? 但我若做了以下的改變: FILE *input; int index = 0; if ((input = fopen("test.txt", "rt")) != NULL) { char str[256]; char strs[10][256]; while (fscanf(input, "%s", strs[index]) != EOF && index < 10) { index = index 1; } fclose(input); }index的值就會是10,可是奇怪的是,str[]從頭到尾都沒有用過,為什麼多了這個變數就會正常,而少了就會有問題?不知道有哪位大大知道到底發生什麼事了嗎?謝謝! 發表人 - hornacek 於 2005/05/03 12:53:57 |
GeorgeKu
中階會員 發表:1 回覆:120 積分:74 註冊:2004-10-13 發送簡訊給我 |
|
blk5743
高階會員 發表:34 回覆:371 積分:236 註冊:2003-11-17 發送簡訊給我 |
char strs[10][256]; while (fscanf(input, "%s", strs[index]) != EOF && index < 10)
上面這一行寫錯 你的fscanf會執行到第11次,index會因為變成10而跳開
但是因為你的strs[10][256]只有10個,所以第11次的資料會寫到index的位址
造成index的值亂掉 你可以在debug視窗下看&strs,&index
在我的電腦上&strs = 0x12EB90, &index = 0x12590
兩個值在吊腦的位置上相差0xA00(2560)
所以你第11次呼叫fscanf才會把值蓋到index 你可以把code改成下列的樣子,用中斷點去看,就會很明顯了
while ((fscanf(input, "%s", strs[index]) != EOF)) { if ( index >= 10 ) break; index = index 1; } |
hornacek
一般會員 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
引言: char strs[10][256]; while (fscanf(input, "%s", strs[index]) != EOF && index < 10) 上面這一行寫錯 你的fscanf會執行到第11次,index會因為變成10而跳開 但是因為你的strs[10][256]只有10個,所以第11次的資料會寫到index的位址 造成index的值亂掉 你可以在debug視窗下看&strs,&index 在我的電腦上&strs = 0x12EB90, &index = 0x12590 兩個值在吊腦的位置上相差0xA00(2560) 所以你第11次呼叫fscanf才會把值蓋到index 你可以把code改成下列的樣子,用中斷點去看,就會很明顯了真的是這樣哩...我把code改為while ((fscanf(input, "%s", strs[index]) != EOF)) { if ( index >= 10 ) break; index = index 1; } FILE *input; int index = 0; if ((input = fopen("test.txt", "rt")) != NULL) { char strs[10][256]; while (index < 10 && fscanf(input, "%s", strs[index]) != EOF) { index = index 1; } fclose(input); }就不會發生誤填值的問題了!也真的解決了我覺得奇怪的問題。 謝謝兩位大大的解說...感激... |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |