我刚刚了解了 C 中的流缓冲。据我了解,printf()C 中是缓冲的,并且仅在遇到新行、缓冲区已满或我们stdout手动刷新时才打印。然后我尝试这些代码行:
#include <stdio.h>
int main() {
printf("Hello world");
while(1);
}
Run Code Online (Sandbox Code Playgroud)
理论上,控制台不会收到任何内容,因为Hello world仍在缓冲区中。但由于某些原因,我的控制台仍然显示该字符串。为什么会这样呢?
编辑:我在 Windows 10 中使用命令提示符。
\n\n\n
printf()在 C 中是缓冲的,只有在遇到新行时才打印
不完全的。
\n流通常是以下 3 种模式之一:无缓冲、完全缓冲、行缓冲。通常stdout是行缓冲,在打印 a 时刷新数据'\\n',其内部缓冲区已满或由于诸如 之类的显式命令fflush(stdout)。
然而 C 指定了这 3 种模式:对这些特性的支持是实现定义的。C17dr \xc2\xa7 7.21.3 3.
\n因此,看到输出和不看到输出都符合OP的代码。
\n为了确保看到输出,请冲洗。否则,就接受实现定义的行为。
\nprintf("Hello world");\nfflush(stdout); // add\nwhile(1);\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |