c - 在 c 中,system() 在 printf() 之前执行,即使 printf 先出现
问题描述
我刚开始在 c 中使用 system() 函数,我想使用 system 函数从它自身中启动相同的可执行文件,所以我编写了以下程序
#include <stdlib.h>
#include <stdio.h>
int main()
{
printf("some string");
system("./a.out");
}
-我用gcc编译它-
当我运行程序时它没有打印任何东西,它一直在运行,直到我使用快捷键 ctrl-c 停止执行,然后它开始打印输出(直到我停止它才打印任何东西)
我相信语句应该按顺序执行,为什么直到我停止它才打印任何东西?
解决方案
默认情况下,当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'
.
推荐阅读
- aspnetboilerplate - .Net Core 模板对属性 SettingManager 有一个编译警告 CS0108
- html - “Text r”的宽度比“ Text r ”短
- javascript - Javascript Math.random() 返回非常相似的值
- post - 如何检索以表格形式动态显示的列
- javascript - vue: $this=this 为什么在内部函数中使用外部'this'?
- python - Python 脚本在 Spyder(在 Windows 上)中完美运行 - 在 Linux 上不起作用
- angular - 如何在服务从数据库返回对象中的承诺后更新 UI
- bash - bash中循环的总和值
- excel - 我如何从经过的天数计算中排除 FRI 和 SAT 天数
- qt - QtDataVisualization 不可用