2013-05-19 37 views
-2

我有在C簡單的代碼,從文件中的一行讀取和打印,直到存在任何行,但是當我想在Linux Mint的運行它的獲取段錯誤代碼是:與fgets()分段錯誤

# include <stdio.h> 
int main(){ 
    FILE * fr; 
    fr = fopen ("t.txt", "rt"); 
    char line[100]; 
    while(fgets(line, 100, fr) != NULL) 
    { 
     printf("%s",line); 

    } 
    fclose(fr); 
} 

和gdb說:編程接收到的信號SIGSEGV,分段錯誤。 0xb7e82b07在與fgets()從/lib/i386-linux-gnu/libc.so.6 (GDB)

,但我不能發現問題,任何一個可以幫助我嗎?

+3

也許你可能會嘗試在嘗試使用它之前確保'fr'是*有效*嗎? – WhozCraig

+4

「如果字符串是下列之一,則文件在指定模式下打開,否則,行爲未定義。」 < - 字符串'「rt」'不在列表中。 –

+0

如何確保fr有效? – sandra

回答

1
fr = fopen ("t.txt", "rt"); 

從哪裏得到使用"rt"的想法?這不是一個有效的選項fopen(),所以它返回NULL ...其餘的是你的想象力。


道德:做錯誤檢查。

+2

在微軟編譯器中,'「rt」'將以文本模式打開:http://msdn.microsoft.com/en-us/library/yeby3zcb(v=vs.80).aspx(它應該表現相同作爲'「r」'所以它毫無意義),我認爲(但很可能是錯誤的)GCC接受它也沒有大驚小怪。我認爲更可能的問題是't.txt'根本不在當前的工作目錄中。 – Dave

+0

@Dave這不是標準 - 從這一點來說,如果微軟(或GNU,就此而言)得到了正確的結果,我就不會感興趣。 – 2013-05-19 17:53:27

+0

我的觀點是儘管''rt''''''''''''''''''''''''儘管''rt''''''''''',實際問題似乎在其他地方(即CWD不是預期的,這是一個常見的問題)。 – Dave