我对以下代码有疑问。为什么代码的输出变成了
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
由于缓冲,
ft_printf
、printf
和write
的输出不会出现在源顺序中:默认情况下,stdout
是行缓冲到终端的,这意味着各个数字1
、3
和 5
存储在输出流缓冲区中,直到输出换行符或 fflush(stdout)
。退出程序后,所有流都将被刷新并关闭,因此 135
出现在输出中的最后。
在向
123456
写入任何内容之前,您可以通过使用 stdout
将 setvbuf(stdout, NULL, _IONBF, 0)
配置为无缓冲来获取 stdout
输出。