谷动谷力

 找回密码
 立即注册
查看: 514|回复: 0
打印 上一主题 下一主题
收起左侧

【C语言】printf 缓冲区原理

[复制链接]
跳转到指定楼层
楼主
发表于 2023-12-19 23:02:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【C语言】printf 缓冲区原理
我们先来看一个程序,代码如下:
  1. #include <stdio.h>

  2. /// @brief
  3. /// @return
  4. int main()
  5. {
  6.     printf("Hello, World!\n");  // 打印字符串 "Hello, World!"
  7.     fprintf(stderr, "Hello, World!\n");  // 将字符串 "Hello, World!" 输出到错误流
  8.     printf("Hello, %s!\n", "World");  // 打印格式化的字符串 "Hello, World!"
  9.     printf("1");  // 打印数字 1
  10.     fprintf(stderr, "2");  // 将数字 2 输出到错误流
  11.     printf("3");  // 打印数字 3
  12.     printf("4");  // 打印数字 4
  13.     fprintf(stderr, "5");  // 将数字 5 输出到错误流
  14.     printf("\n");  // 打印换行符

  15.     return 0;  // 返回0表示程序正常退出
  16. }
复制代码
保存文件名为test_printf.c

在Linux环境下编译
  1. gcc -o test_printf test_printf.c
复制代码
思考一下,你觉得会什么结果呢?
  1. Hello, World!
  2. Hello, World!
  3. Hello, World!
  4. 25134
复制代码
纳尼,输出结果是这样的?
Why, 一定电脑、系统、编译器……出问题了,你脑海里是不是会冒出这样的想法?

我们来解密一下为什么会输出这样的结果吧。
Linux系统的printf有一个输出缓冲区,而windows没有这一特性。
fprintf(stderr, "2");没有缓冲区,会立即输出,所以25先打印出来134后面打印


+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-5-18 21:08 , Processed in 0.071874 second(s), 41 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表