線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:939
推到 Plurk!
推到 Facebook!

讀字串檔案的奇怪問題?

答題得分者是:blk5743
hornacek
一般會員


發表:29
回覆:76
積分:21
註冊:2004-02-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-03 11:24:18 IP:61.63.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-03 13:57:00 IP:61.228.xxx.xxx 未訂閱
hornacek你好, 你的CODE應該沒有問題,而且我也在我的電腦上跑,跑完的INDEX值是10. 可能是COMPILER或設定的問題吧,我這台電腦上沒裝C builder,所以我用DEV C 去跑的.
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-03 14:13:02 IP:61.66.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-03 17:18:23 IP:210.243.xxx.xxx 未訂閱
引言: 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;
    }
真的是這樣哩...我把code改為
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);
}
就不會發生誤填值的問題了!也真的解決了我覺得奇怪的問題。 謝謝兩位大大的解說...感激...
系統時間:2024-06-16 16:01:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!