gpt4 book ai didi

c - 为什么这个 c 程序不打印第一个 printf 语句?

转载 作者:太空狗 更新时间:2023-10-29 17:15:14 25 4
gpt4 key购买 nike

#include<stdio.h>
#include <unistd.h>
int main(){
while(1)
{

fprintf(stdout,"hello-out");
fprintf(stderr,"hello-err");
sleep(1);
}
return 0;
}

在 gcc 中编译这个程序并执行它时只打印 hello-err 而不是 hello-out。为什么会这样?有人能解释一下背后的原因吗?

最佳答案

如果您将 '\n' 添加到您的消息中,它会(或应该),即。 “你好\n”

原因是 stdout缓冲以便更有效,而 stderr 不缓冲它的输出并且更适用于错误消息和需要立即打印的内容。

stdout 通常 flushed 在以下情况下:

  • 要打印一个换行符(\n)
  • 您从 stdin 读入
  • fflush() 被调用

编辑: 在我的计算机崩溃之前我想添加的另一件事...两次...是您还可以使用 setbuf(stdout, NULL);禁用 stdout 的缓冲。之前我曾这样做过,当时我不得不使用 write() (Unix) 并且不希望我的输出被缓冲。

关于c - 为什么这个 c 程序不打印第一个 printf 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8061019/

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