gpt4 book ai didi

c++ - stderr 的奇怪行为

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

我的程序中有这段代码

while(1){
// some code here

fprintf(stdout,"Output Log");
fprintf(stderr,"Error Log");


//some code here
}

它只打印“错误日志”。看起来我缺少在两个 fprintf 之间刷新。因此,我将“\n”附加到字符串“Output log”。工作正常。但是当我刚交换两个 fprintf 时无法理解这种奇怪的行为

while(1){
// some code here
fprintf(stderr,"Error Log\n");
fprintf(stdout,"Output Log");

//some code here
}

尽管使用“\n”,它只打印“错误日志”。

最佳答案

您的错误是假设两条消息“之间”的换行符是导致两条消息出现的原因。它实际上是输出到 stdout 的换行符末尾,它导致到 stdout 的消息出现(到 stderr 的消息 始终可见,因为 stderr 是无缓冲的。

在任何情况下,除非您在stdout 上手动设置行缓冲模式,否则依靠换行符刷新缓冲区是不可靠的;当 stdout 是终端时,line-buffered 只是默认值。如果您不想强制使用行缓冲或非缓冲模式,那么您必须使用fflush 将输出可靠地交织到stdout标准错误

关于c++ - stderr 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15129510/

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