为什么我的代码输出“2467135”而不是“1234567”?

问题描述 投票:0回答:1

我对以下代码有疑问。为什么代码的输出变成了

2467135
?它首先给出我自己的函数的输出,然后是
write
函数的输出,最后是
printf
函数的输出。这种行为的原因是什么。

int ft_printf(const char *s, ...)
{
    va_list ap;
    int     i;
    int     len;

    len = 0;
    i = 0;
    va_start(ap, s);
    while (s[i])
    {
        if (s[i] == '%') 
        {
            len += ft_formats(s, ap, ++i);
        }
        else
            len += ft_putchar(s[i]);
        i++;
    }
    va_end(ap);
    return (len);
}

#include <stdio.h>

int main()
{
    printf("1");
    ft_printf("2");
    printf("3");
    ft_printf("4");
    printf("5");
    ft_printf("6");
    write(1,`"7",`1);
}

我期待

1234567
,但输出结果为
2467135

c printf stdout
1个回答
0
投票

由于缓冲,

ft_printf
printf
write
的输出不会出现在源顺序中:默认情况下,
stdout
是行缓冲到终端的,这意味着各个数字
1
3
5
存储在输出流缓冲区中,直到输出换行符或
fflush(stdout)
。退出程序后,所有流都将被刷新并关闭,因此
135
出现在输出中的最后。

在向

123456
写入任何内容之前,您可以通过使用
stdout
setvbuf(stdout, NULL, _IONBF, 0)
配置为无缓冲来获取
stdout
输出。

© www.soinside.com 2019 - 2024. All rights reserved.