c - 当 printf 可以自行打印时,为什么在 printf 之后使用 fflush?
问题描述
我是 C 新手,如果我的问题太基本,对不起。我经常看到如下代码:
printf("%d", counter);
fflush(stdout);
我的猜测是,如果缓冲区未满,它将不会打印输出,因此您需要刷新stdout
. 但是我尝试不使用fflush
,只是printf
,我仍然有输出打印在屏幕上,那么使用有什么意义flush
呢?
解决方案
fflush
使用after的主要原因printf
是时机。
printf
将在某个时间点显示信息。基本上所有的打印printf
都被缓冲。 fflush
保证缓冲区被清空,这意味着打印发生在调用fflush
.
在容易崩溃的程序中,fflush
可以是一个非常有用的工具。通常,程序用户希望收到的消息是崩溃前打印的最后一条消息。如果程序没有fflush
该用户可能不会得到最后一个打印语句,该语句在显示之前丢失在缓冲区中。
这通常会导致开发人员在崩溃后分析日志文件时在程序源代码的错误位置查找错误。心理过程是“好吧,它不可能在这里,因为有一个printf
我们会看到的”,而现实是程序通过了“会被看到”的printf
声明,但在缓冲区中与该消息一起死亡。如果在打印语句后立即刷新语句,则不会发生这种情况(尽管程序运行速度较慢,因为刷新需要时间)。
推荐阅读
- r - 具有多个 NA 的向量的替代元素
- javascript - 如何在 React Native 中获取降价文本?
- ruby - 如何找到包含所有元音的同一数组的两个元素
- node.js - 在 Node Js 中处理数据包
- duplicates - 在具有已排序数据的大型机顺序数据集中对记录进行重复数据删除而不进行排序
- python - Python递归四叉树问题
- c++ - 如何插入 UV 坐标?
- php - imagemagick粘贴图像上的比例不正确
- c# - 有没有办法将请求标头指定为 ASP.NET Core 控制器操作参数/参数?
- php - 在 smarterasp.net 主机上上传 Laravel 网站