2016-12-02 23 views
0

我目前處於使用Lexar進行流分析的編譯器類中。fprintf如果程序出現分段錯誤,則不寫入文件

對於我的一半測試用例來說,輸出是完美的並且沒有問題,但是其他數量的seg故障。

我已經添加了fprintf(fp,「描述性文本\ n」);在每個關鍵字的方式下,我可以按照程序流程進行調試。 但是,我的程序只寫入文件IFF它沒有seg錯誤。

有沒有人有一個想法什麼是錯的,我怎麼能總是寫?

+0

歡迎來到SO。當我們看不到您的代碼時,很難幫助您。請更新您的帖子以顯示您的代碼,告訴我們會發生什麼,以及您希望發生的事情。 – henrikstroem

回答

2

文件IO被緩衝。也就是說,fprintf()調用在將數據實際傳輸到操作系統之前,會存儲多次調用的輸出。如果發生段錯誤,則該數據根本不會傳輸到操作系統。

試試這個:

fprintf(fp, "descriptive text\n"); 
fflush(fp); 
+0

如果這可行,我可以吻你嗎? –

+0

堆棧溢出是否允許賞金? –

+0

是的,它的確如此。我見過他們,但我不知道他們是如何工作的。但是,爲了解決所有人難倒的問題,請節省您的金錢。 –

2

當你打開文件,設置文件流使用行緩衝帶setvbuf()。當一個換行符被打印到文件緩衝區時,緩衝區將被刷新。

FILE *fp = fopen("log.file", "a"); 
setvbuf(fp, NULL, _IOLBF, BUFSIZ); 

這節省了在每次調用打印函數後添加fflush(fp);

+0

太棒了。謝謝! –