我目前处于使用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