我目前處於使用Lexar進行流分析的編譯器類中。fprintf如果程序出現分段錯誤,則不寫入文件
對於我的一半測試用例來說,輸出是完美的並且沒有問題,但是其他數量的seg故障。
我已經添加了fprintf(fp,「描述性文本\ n」);在每個關鍵字的方式下,我可以按照程序流程進行調試。 但是,我的程序只寫入文件IFF它沒有seg錯誤。
有沒有人有一個想法什麼是錯的,我怎麼能總是寫?
我目前處於使用Lexar進行流分析的編譯器類中。fprintf如果程序出現分段錯誤,則不寫入文件
對於我的一半測試用例來說,輸出是完美的並且沒有問題,但是其他數量的seg故障。
我已經添加了fprintf(fp,「描述性文本\ n」);在每個關鍵字的方式下,我可以按照程序流程進行調試。 但是,我的程序只寫入文件IFF它沒有seg錯誤。
有沒有人有一個想法什麼是錯的,我怎麼能總是寫?
文件IO被緩衝。也就是說,fprintf()
調用在將數據實際傳輸到操作系統之前,會存儲多次調用的輸出。如果發生段錯誤,則該數據根本不會傳輸到操作系統。
試試這個:
fprintf(fp, "descriptive text\n");
fflush(fp);
如果這可行,我可以吻你嗎? –
堆棧溢出是否允許賞金? –
是的,它的確如此。我見過他們,但我不知道他們是如何工作的。但是,爲了解決所有人難倒的問題,請節省您的金錢。 –
當你打開文件,設置文件流使用行緩衝帶setvbuf()
。當一個換行符被打印到文件緩衝區時,緩衝區將被刷新。
FILE *fp = fopen("log.file", "a");
setvbuf(fp, NULL, _IOLBF, BUFSIZ);
這節省了在每次調用打印函數後添加fflush(fp);
。
太棒了。謝謝! –
歡迎來到SO。當我們看不到您的代碼時,很難幫助您。請更新您的帖子以顯示您的代碼,告訴我們會發生什麼,以及您希望發生的事情。 – henrikstroem