为什么C直到换行才打印到shell?

use*_*425 4 c linux macos shell

在C中,有时我的输出将不会打印到终端,直到我打印换行符\n.例如:

int main()
{
   printf("Hello, World");
   printf("\n");
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

Hello World将不会打印到下一个printf (我知道这是通过在gdb中设置断点).有人可以解释为什么会发生这种情况以及如何解决这个问题?

谢谢!

das*_*ght 8

这是出于性能原因而完成的:将数据传递到控制台太昂贵(就执行速度而言)逐个字符地执行它.这就是为什么在打印换行符之前缓冲输出的原因:字符在数组中收集,直到打印时为止,此时整个字符串被传递到控制台.您还可以显式强制输出,如下所示:

fflush(stdout);
Run Code Online (Sandbox Code Playgroud)