gpt4 book ai didi

c - printf 的输出乱序

转载 作者:太空狗 更新时间:2023-10-29 16:48:34 24 4
gpt4 key购买 nike

我写了以下内容:

#include <stdlib.h>
#include <stdio.h>
void ExecAsRoot (char* str);
int main ()
{
printf ("Host real ip is:");
ExecAsRoot("ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'");
return 0;
}

void ExecAsRoot (char* str) {
system (str);
}

我的预期输出是:

Host real ip is:7.17.11.29

而实际输出是:

7.17.11.29
Host real ip is:

这是为什么?

最佳答案

正在缓冲 printf 的输出,因为正在打印的字符串不包含换行符。结果,缓冲区直到程序结束才被刷新,因此出现在 system 命令的输出之后。

要刷新缓冲区,请使用 fflush:

printf ("Host real ip is:");
fflush(stdout);
ExecAsRoot("ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'");

如果您希望对stdout 的所有写入都是无缓冲的,您可以使用setvbuf 来禁用缓冲:

setvbuf(stdout, NULL, _IONBF, 0);     // _IONBF = unbuffered

或者更简单地说:

setbuf(stdout, NULL);

然后所有对 stdout 的写入都会立即出现。

关于c - printf 的输出乱序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45468072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com