2010-04-23 67 views
3

我試圖寫一個字到使用此功能的文件:的fwrite寫一個整數

extern void write_int(FILE * out, int num) { 
    fwrite(&num,sizeof(int),1, out); 
    if(ferror(out)){ 
     perror(__func__); 
     exit(EXIT_FAILURE); 
    } 
} 

,但我得到每當它試圖運行fwrite的分段錯誤。我查看了fwrite(3)的手冊頁,我覺得我正確使用了它,有什麼我錯過了嗎?

+0

什麼平臺/編譯器?一致性問題可能很重要。 – abelenky 2010-04-23 03:04:14

+2

只要確保'out'不是'NULL',休息就好了。 – 2010-04-23 03:14:32

+0

當我測試這段代碼時,我沒有想到,並決定寫一個名爲「test」的測試文件,這也是我的測試程序的二進制文件的名稱,它給了我一個段錯誤。 >。所以函數本身很好,只要確定你傳入的是有效的,正如N 1.1和其他人所建議的那樣。 – 2010-04-23 03:23:19

回答

5

試試這個:

void write_int(FILE * out, int num) { 
    if (NULL==out) { 
     fprintf(stderr, "I bet you saw THAT coming.\n"); 
     exit(EXIT_FAILURE); 
    } 
    fwrite(&num,sizeof(int),1, out); 
    if(ferror(out)){ 
     perror(__func__); 
     exit(EXIT_FAILURE); 
    } 
} 

爲什麼是你的原始功能extern

+1

哈哈。好。謝謝。但現在它所做的只是展示「我敢打賭,你看到了這個來臨。」 *自捂臉* 這已經不是第一次發生了,也不會是最後一次...... 功能是因爲的extern我寫,我會使用的系統庫編程類下一季... – user149100 2010-04-23 03:27:56

+0

哈哈在心理調試的效果 – Joshua 2010-04-23 03:44:48

+0

如果你的'FILE *'是'NULL',那通常意味着你忘了打開它,或者你的打開失敗。檢查手冊頁上的「fopen」(大概這就是你正在使用的)。 – tylerl 2010-04-26 05:22:06

0

什麼平臺/編譯器?一致性問題可能很重要。

您可以成功寫入其他任何文件嗎?我懷疑你的文件可能無法正常打開。

+0

提示:fwrite需要void *並將其轉換爲char *以便align =不是問題 – Joshua 2010-04-23 03:45:26

0

文件句柄是否有效?你打開()「w」了嗎?如果不是,則fwrite()會進行段錯誤。

該函數本身確實沒有什麼,所以它顯然是fwrite調用,這是問題。檢查參數。