我刚刚开始在c中使用system()函数,并且考虑过使用system函数从其内部启动相同的可执行文件,因此编写了以下程序
#include <stdlib.h>
#include <stdio.h>
int main()
{
printf("some string");
system("./a.out");
}
Run Code Online (Sandbox Code Playgroud)
我用gcc编译了
当我运行该程序时,它什么也没打印,只是一直运行直到我使用快捷键ctrl-c停止执行,然后它才开始打印输出(直到我停止它,它才打印任何内容)
我相信这些语句应该按顺序执行,为什么在我停止它之前不打印任何内容?
默认情况下,当stdout连接到终端时,它是行缓冲的。
printf("some string");
Run Code Online (Sandbox Code Playgroud)
没有'\n',您也不会再调用fflush(stdout);它,因此所有这些printf("some string");操作都将复制"some string"到您stdout的输出缓冲区中。
缓冲区在的末尾刷新main。
printf("some string\n");只要stdout连接到终端并且您没有更改stdout的缓冲,就会立即刷新缓冲区。
printf("some string"); fflush(stdout);无论上下文如何,都将立即刷新缓冲区,而无需使用'\n'。