相同的代码,不同 C 编译器中 printf() 和 write() 的不同打印顺序

same code, different printing order with printf() and write() in different C compilers

编辑:我简化了原始代码。

密码是:

#include <stdio.h>
#include <unistd.h>

int     main(void)
{

    printf("printf1\n");
    write(1, "1 should be after printf\n", 25);

    printf("printf2\n");
    write(1, "2 should be after printf\n", 25);

    return 0;
}

Ideone 的意外结果:

1 should be after printf
2 should be after printf
printf1
printf2

cs50

的预期结果
printf1
1 should be after printf
printf2
2 should be after printf

为什么输出顺序不同?

这里 printf 等待缓冲区满,而 write 不这样做。如果您的 printf 末尾有一个 \n(换行符),那么它会在遇到 \n 时立即调用 write。请注意,一旦缓冲区已满,print 也会调用 write。 write 只会将给定数量的字节输出到终端,因此会更快。

试试你的代码:

printf("i = %d\n", i);
ft_putstr("should be printed right after printf\n");