2013-01-10 115 views
0
// Trying to read file 


void readFilee(char *namefile){ 

    FILE *f_in = fopen(namefile,"r"); 
    char x; 
    int i = 0; 

    if(!f_in){ printf("Error"); exit(0); } 

    /* read to EOF */ 
    while(1){ 
     x = getc(f_in); 
     if(x == '\n') continue; 
      archivo[i] = x; 
     if(x == EOF) break; 
      i++; 
    } 
    tamArchivo = i; 
    fclose(f_in); 
} 

錯誤是f_in的事實是空的,但我不明白爲什麼?我試圖連接一個服務器與多個客戶端,客戶端初始化等待連接。C - 讀取文件錯誤..!f_in爲空,不知道爲什麼?

命令verificion「如果」我得到「錯誤」

+0

你可以張貼'archivo'的定義是什麼?請注意'getc()'返回一個'int'而不是'char'。 – hmjd

+0

您也可以檢查fopen的調用是否成功(f_in應該爲非null) – simonc

+0

您使用的是Linux嗎?如果是這樣,運行'gdb。/ yourprog'然後數字'where'並且給我們看結果 –

回答

0

while循環結束後添加

archivo[i] = '\0'; 

。這將在您的字符串的末尾添加空charachter archivo

也可能是你archivo陣列的存儲空間不足以獲取文件的全部內容,因此它可能導致緩衝區溢出,從而可能會導致一個崩潰

0

驗證f_in不使用它之前NULL。我打賭fopen失敗,這導致f_in爲NULL。稍後當您撥打getc時,它會崩潰。

如果情況並非如此,請嘗試使用cgdb調試應用程序,以查看哪條線導致崩潰。

0

嘗試用while (!feof(f_in))代替while (1)。當文件結束時,這將退出循環。你不應該檢查文件的結尾,就像你在循環中一樣。這需要文件字符的結尾位於文件的某個位置。 EOF的值實際上是專門設計的,因此它不會出現在您的文件中。

其他要注意的事項是取消註釋檢查文件是否已成功打開。如果此檢查失敗,則不應嘗試使用文件指針上的任何fxxx函數。

0

你不檢查「檔案館」 那簡直是對我的數組邊界的第一件事就是檢查

相關問題