首页 > 解决方案 > 为什么输出的执行顺序不符合预期

问题描述

我正在学习 c,但我在教程中陷入了以下一些代码。

#include <stdio.h>
 
int main() {
    fprintf(stdout, "This is to stdout. ");
    fprintf(stderr, "This is to stderr. ");
    fprintf(stdout, "This is also to stdout. ");
}

他们得到的结果是

This is to stderr. This is to stdout. This is also to stdout. 

这是不正常的,但我得到的是

This is to stdout. This is to stderr. This is also to stdout.

这是有序的。所以这很奇怪,为什么我得到了不同的结果?(我指的 tut 是https://www.journaldev.com/39049/fflush-in-c

标签: cstdoutstdinfflush

解决方案


也许在您的实现中,stdoutunbuffered。检查您的文档。

您可能想尝试setvbuf()恢复stdoutline-buffered:例如,setvbuf(stdout, 0, _IOLBF, 1000);main() 任何其他使用stdout.


通常stdoutline-buffered并且stderrunbuffered

unbuffered:一旦数据可用,操作系统就会将数据从流中发送到设备。

line-buffered:当达到换行符(或限制)时,数据被发送到设备。

完全缓冲:当缓冲区已满时,数据被发送到设备。

fprintf(stdout, "hello"); // "hello" is kept in buffer because no newline
fprintf(stderr, "again"); // "again" is sent to the device immediately
fprintf(stdout, "world"); // "world" is kept in buffer
// ...
return 0;                 // buffer (now containing "helloworld") is sent to the device at program completion

推荐阅读