我刚刚了解了 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);\n
Run Code Online (Sandbox Code Playgroud)\n