2011-04-19 17 views
0

這裏是給出文件掃描功能:讀取文件和使用的fscanf進入一個無限循環

void scan(FILE *file) { 

    while (true) { 
     char s1[1001]; 
     int result = fscanf(file, "%10s", s1); 
     printf("%d\n", result); 
     s1[1001] = '\0'; 
     if (result == EOF) break; 
    } 


} 

我將它傳遞給這個函數之前使用的fopen的文件。 它在無限循環中輸出-1,但不會中斷。怎麼來的?

回答

0

我想這取決於什麼是s1

確保它的一個char s1[ appropriate_size ]而不是char * s1

它在我的情況下工作的偉大: Test

+0

你好,它被設置爲一個指定的大小(更新代碼)。 – hut123 2011-04-19 01:20:38

+0

不應該s1 [1001] ='\ 0';'s1 [1000] ='\ 0';'? – Sadique 2011-04-19 01:28:40

+0

所以,我的目標是分離處理在文件內部掃描的令牌的主函數和單獨的函數。它在fopen與fscanf位於相同的函數中時起作用。我的問題是,當我試圖打開主文件中的文件,然後將文件發送到不同的功能,它不起作用。 – hut123 2011-04-19 01:36:41

2

您迫使s1空結束時有一個差一錯誤,這樣的:

s1[1001] = '\0'; 

跑過去s1末,它應該是:

s1[1000] = '\0'; 

在聲明C中的陣列char s1[X];X是數組中元素的數量,並且由於C數組從零開始索引,因此最後一個元素是s1[X-1]

此錯誤可能會改變printfresult == EOF檢查之間result的值。