请教printf缓冲区。

SilentHunter460 2017-05-25 11:11:40
书上说C标准明确规定了何时把缓冲区的内容发送的屏幕:当缓冲区满、遇到换行字符或需要输入的时候。
但这个为什么还会被打印出来?这么短缓冲区应该不满,也没有\n换行字符,也没有scanf。

int main(void)
{
printf("test");
return 0;

}
...全文
208 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2017-05-26
  • 打赏
  • 举报
回复
你说的这种情况只是指逗留在缓冲区的数据 它不保证数据能立即输出,也不能保证全部的数据都能立即输出。 但是到遇到那几种情况下,缓冲区会被清空 C追求性能,所以输出时机由更系统自由地控制,遇到某些情形之下才进行干涉。 类似于医院的门诊和急症?
赵4老师 2017-05-26
  • 打赏
  • 举报
回复
在每个最后不带\n的printf后面加fflush(stdout);
paschen 2017-05-26
  • 打赏
  • 举报
回复
只是说 当缓冲区满、遇到换行字符或需要输入的时候 会清空缓冲区 但没说其他时候一定不会清空 编译器和系统可以进行优化 控制台的输出一般都会直接看得到,但对文件的输出可能就不会立即写入了,可能就会等到缓冲区满才写入
自信男孩 2017-05-26
  • 打赏
  • 举报
回复
该程序只是打印test就执行结束了。既然程序执行结束了,那么系统就要回收它占用的内存。回收的过程中,将停留在内存的数据刷到文件中(标准输出也是文件),将输出缓冲区里的数据也一并清除,所以它肯定会输出的。
  • 打赏
  • 举报
回复
int main(void) { printf("test"); sleep(5); } 这样要等5秒后才能看到test,5秒之前test一直是在系统的buffer里的,之于你的问题,这些都是由操作系统帮你处理的。因为return 0,这时你的main程序都结束了,这时操作系统自然会对Main程序占用的buffer要做flush处理。具体的可以看看linux系统编程相关的书。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧