谷动谷力

标题: 【C语言】printf 缓冲区原理 [打印本页]

作者: 鸣涧    时间: 2023-12-19 23:02
标题: 【C语言】printf 缓冲区原理
【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后面打印







欢迎光临 谷动谷力 (http://bbs.sunsili.com/) Powered by Discuz! X3.2