社区
C语言
帖子详情
请教printf缓冲区。
SilentHunter460
2017-05-25 11:11:40
书上说C标准明确规定了何时把缓冲区的内容发送的屏幕:当缓冲区满、遇到换行字符或需要输入的时候。
但这个为什么还会被打印出来?这么短缓冲区应该不满,也没有\n换行字符,也没有scanf。
int main(void)
{
printf("test");
return 0;
}
...全文
218
5
打赏
收藏
请教printf缓冲区。
书上说C标准明确规定了何时把缓冲区的内容发送的屏幕:当缓冲区满、遇到换行字符或需要输入的时候。 但这个为什么还会被打印出来?这么短缓冲区应该不满,也没有\n换行字符,也没有scanf。 int main(void) { printf("test"); return 0; }
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
幻夢之葉
2017-05-26
打赏
举报
回复
你说的这种情况只是指逗留在缓冲区的数据 它不保证数据能立即输出,也不能保证全部的数据都能立即输出。 但是到遇到那几种情况下,缓冲区会被清空 C追求性能,所以输出时机由更系统自由地控制,遇到某些情形之下才进行干涉。 类似于医院的门诊和急症?
赵4老师
2017-05-26
打赏
举报
回复
在每个最后不带\n的printf后面加fflush(stdout);
paschen
2017-05-26
打赏
举报
回复
只是说 当缓冲区满、遇到换行字符或需要输入的时候 会清空缓冲区 但没说其他时候一定不会清空 编译器和系统可以进行优化 控制台的输出一般都会直接看得到,但对文件的输出可能就不会立即写入了,可能就会等到缓冲区满才写入
自信男孩
2017-05-26
打赏
举报
回复
该程序只是打印test就执行结束了。既然程序执行结束了,那么系统就要回收它占用的内存。回收的过程中,将停留在内存的数据刷到文件中(标准输出也是文件),将输出缓冲区里的数据也一并清除,所以它肯定会输出的。
JXES智能生态系统
2017-05-26
打赏
举报
回复
int main(void) { printf("test"); sleep(5); } 这样要等5秒后才能看到test,5秒之前test一直是在系统的buffer里的,之于你的问题,这些都是由操作系统帮你处理的。因为return 0,这时你的main程序都结束了,这时操作系统自然会对Main程序占用的buffer要做flush处理。具体的可以看看linux系统编程相关的书。
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章