2016-12-02 79 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

太棒了。谢谢! –