gpt4 book ai didi

C: perror, stdout 输出顺序

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:50 26 4
gpt4 key购买 nike

代码

printf("Doing functionname... ");
if (functionname(args) == -1)
{
perror("functionname");
}
else
{
printf("ok\n");
}

预期行为

Doing functionname... ok

Doing functionname... functionname: Error blah blah

实际行为

但是 stderrstdout 是不同的输出流,所以结果看起来像这样,

functionname: Error blah blah

Doing functionname...

有哪些可能的解决方法?

最佳答案

刷新输出流。 stdout,默认情况下,是行缓冲的;所以只有当它看到 '\n'(或当缓冲区被填满时)才会有效地写入输出。相比之下,stderr 默认情况下不缓冲,因此每个字符都会立即输出。

printf("blah blah blah");
fflush(stdout);

如果您使用 '\n' 终止字符串,流将被刷新,而不需要特定的 fflush 语句。

printf("blah blah blah\n"); /* stream flushed */

或者,将您的信息内容打印到 stderr

fprintf(stderr, "Doing functioname...");

这样做的好处是用户可以将所有信息消息重定向到/dev/null

关于C: perror, stdout 输出顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8773996/

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