2012-10-01 111 views
1

我正在嘗試將字符文件讀入64個字符的數組中。該文件讀取發生在main()在讀取數據文件時發生段錯誤

int main (int argc, char **argv) 
{ 
    FILE *fp; 
    char write_msg[BUFFER_SIZE]; 

    fp = fopen("test.data", "r"); 

    int i; 
    for (i = 0; i < (BUFFER_SIZE-1); i++){ 
     fscanf(fp, "%s\n", &write_msg[i]); 
     printf ("printing in the for loop"); 
    } 
    fclose(fp); 
    printf("Starting the main().\n"); 
    printf("in Reader, the msg is: %s\n",write_msg); 

    pid_t pid; 
    int fd[2]; 

我不斷收到一個賽格故障,我不知道我在做什麼

+0

在for循環中爲printf添加一個換行符,使其不會被緩衝。在段錯誤之前你有多遠? – Dan

+0

問題1:未檢查「fopen()」錯誤。問題2:什麼是「BUFFER_SIZE」,你確定「fscanf(write_msg [BUFFER_SIZE])」是否會超過它?問題3:你想要在循環中完成什麼?讀一個字符?閱讀一個字符串?閱讀一行?你如何控制正在閱讀的內容?我真的認爲你需要重新思考你的邏輯。恕我直言... – paulsm4

+0

試圖讀取一行到數組中 –

回答

1

fscanf(fp, "%s\n", &write_msg[i]);應該是fscanf(fp, "%c\n", &write_msg[i]);,你不想掃描字符串轉換成字符。

而且write_msg應該用「\ 0」結束,write_msg[BUFFER_SIZE-1]=0

0

我看到你的代碼如下問題:

fscanf(fp, "%s\n", &write_msg[i]); 

您正試圖讀取一個字符串開始位置我是在你的循環中移動。當我到達爲字符串write_msg保留的內存末尾時,將很容易出現分段錯誤。

另一項建議:把你的FP描述符驗證:

fp = fopen("test.data", "r"); 
if (fp == NULL) { 
    /* Show an error and exit */ 
} 

如果由於某種原因該文件無法讀取,FP將是NULL和分段錯誤將得到提升。

0

您正在將一個可能相當長的字符串掃描到緩衝區中,而不會限制將讀取多少個字符。你不應該那樣做。即使字符串可能長得多,你也會將i加1。您應該使用fgetsfread將整個文件讀入緩衝區,因爲您實際上不需要fscanf的特殊功能,並且這些功能需要讀取一定長度的字符。或者,如果你真的很喜歡你的for循環,你可以使用fgetc,這正是你認爲fscanf正在做的。

相關問題