|
【C语言】printf 缓冲区原理
我们先来看一个程序,代码如下:
- #include <stdio.h>
- /// @brief
- /// @return
- int main()
- {
- printf("Hello, World!\n"); // 打印字符串 "Hello, World!"
- fprintf(stderr, "Hello, World!\n"); // 将字符串 "Hello, World!" 输出到错误流
- printf("Hello, %s!\n", "World"); // 打印格式化的字符串 "Hello, World!"
- printf("1"); // 打印数字 1
- fprintf(stderr, "2"); // 将数字 2 输出到错误流
- printf("3"); // 打印数字 3
- printf("4"); // 打印数字 4
- fprintf(stderr, "5"); // 将数字 5 输出到错误流
- printf("\n"); // 打印换行符
- return 0; // 返回0表示程序正常退出
- }
复制代码 保存文件名为test_printf.c
在Linux环境下编译
- gcc -o test_printf test_printf.c
复制代码 思考一下,你觉得会什么结果呢?
- Hello, World!
- Hello, World!
- Hello, World!
- 25134
复制代码 纳尼,输出结果是这样的?
Why, 一定电脑、系统、编译器……出问题了,你脑海里是不是会冒出这样的想法?
我们来解密一下为什么会输出这样的结果吧。
Linux系统的printf有一个输出缓冲区,而windows没有这一特性。
fprintf(stderr, "2");没有缓冲区,会立即输出,所以25先打印出来134后面打印
|
+10
|