首页 > 解决方案 > 在 c 中,system() 在 printf() 之前执行,即使 printf 先出现

问题描述

我刚开始在 c 中使用 system() 函数,我想使用 system 函数从它自身中启动相同的可执行文件,所以我编写了以下程序

#include <stdlib.h>
#include <stdio.h>

int main()
{
    printf("some string");
    system("./a.out");
}

-我用gcc编译它-

当我运行程序时它没有打印任何东西,它一直在运行,直到我使用快捷键 ctrl-c 停止执行,然后它开始打印输出(直到我停止它才打印任何东西)

我相信语句应该按顺序执行,为什么直到我停止它才打印任何东西?

标签: clinuxgcc

解决方案


默认情况下,当stdout连接到终端时,它是行缓冲的。

printf("some string");

里面没有 a '\n',你也没有在它之后调用fflush(stdout);,所以所有这些printf("some string");都是复制"some string"到你stdout的输出缓冲区中。

缓冲区在结束时被刷新main

printf("some string\n");将立即刷新缓冲区,前提stdout是连接到终端并且您没有更改stdout' 缓冲。

printf("some string"); fflush(stdout);无论上下文如何,都将立即刷新缓冲区,并且不需要'\n'.


推荐阅读