在 C 中,有时我的输出在打印换行符之前不会打印到终端\n
。例如:
int main()
{
printf("Hello, World");
printf("\n");
return 0;
}
Hello World 直到下一次才会打印printf
(我通过在 gdb 中设置断点知道这一点)。有人可以解释为什么会发生这种情况以及如何解决它吗?
谢谢!
这样做是出于性能原因:将数据传递到控制台太昂贵(就执行速度而言),无法逐个字符地进行。这就是为什么在打印换行符之前输出被缓冲的原因:字符被收集在一个数组中,直到打印的时候,整个字符串被传递到控制台。您还可以显式强制输出,如下所示:
fflush(stdout);
此外,您还可以使用setvbuf(3)fflush()
设置缓冲选项。