2010-02-18 103 views
0

什麼可能是它的問題?爲什麼我得到這段代碼的分段錯誤?

#include <stdio.h> 
#include <string.h> 
#define SIZE 19 

void filePrint(char fileName[]); 

int main (void) 
{ 
    char fileRead[SIZE]; 

    filePrint(fileRead); 

    return 0; 
} 

void filePrint(char fileName[]) 
{ 
    FILE *inp; 
    int input_status = 0; 
    char readFile[SIZE]; 

    inp = fopen(fileName, "r"); 

    printf("\nEnter a file to print:\n"); 

    input_status = fscanf(inp, "%s", readFile); 

    while (input_status != EOF) 
    { 
     printf("%s\n", readFile); 
     input_status = fscanf(inp, "%s", readFile); 
    } 

    fclose(inp); 
} 
+2

如果您可以儘量減少發佈相同問題的代碼量,您將學到更多,並獲得更好的答案。如果你只是拋棄所有的代碼並且說「解決我的問題」,那麼我們就不會動心地修復你的代碼,但是如果你發佈了一些小樣本並且說「爲什麼這不符合我的預期?」我們通常很樂意向您解釋。 – 2010-02-18 04:38:11

回答

3

除此之外,您從未真正指定要從中讀取的文件?

+3

實際上,段錯誤發生在他試圖從文件句柄中讀取時,該文件句柄正在取消引用「NULL」指針。但是由於你陳述的原因,指針是'NULL'的,所以+1用於幫助而不是迂腐。 – 2010-02-18 04:35:07

+0

如果'fileRead'不包含任何NUL字符,那麼段錯誤可能發生在'fopen()'返回之前。 – bk1e 2010-02-18 15:26:51

1

看起來像你從來沒有把任何東西放到main中的fileRead []中,然後將它送到filePrint(),它將它提供給fopen()。即「未初始化的數據」

7

我認爲你應該回去閱讀File I/O的一章。

貫穿您在腦海中寫下的代碼並大聲說出。

您試圖打開一個文件,存儲在fileName字符串中,但該字符串尚未初始化爲任何有效的(對於fopen)。如果無法打開文件,fopen會返回一個NULL指針。你不能使用這個NULL指針來讀取。 另外,如果您使用fscanf從您剛剛打開的文件中讀取,則用戶無法輸入任何內容。

2

當您撥打fopen(fileName, "r");時,fileName尚未填入文件名。這是一個未初始化的數組。

+0

謝謝...我想通了 – Tomi 2010-02-18 04:56:15

+0

這不是正確的答案嗎? – Craig 2010-02-18 06:47:50

1

如果您在fileRead []數組中也提到了文件名,則會出現分段錯誤。 由於您指定的數組大小爲19.您應該在1024中指定fileRead []數組中的大數組大小。

1

您應該給函數的文件名。

您傳遞沒有值的字符數組。那時候,數組的值是空的。在fopen函數中,您試圖打開該文件。

所以fopen函數返回null值。如果fopen函數成功打開文件,它將返回正確的文件指針。否則它將返回null,該錯誤將被存儲在errno中。

使用空指針無法讀取。

相關問題