C中perror函数两个输出执行顺序的区别

Difference between the execution sequence of two outputs of perror function in C

Difference between output sequence on the same code on removing "\n"

#include<stdio.h>
#include<errno.h>
#include<string.h>


int main()
{
FILE * fp;
fp = fopen("GeeksForGeeks", "/root/C");
printf("Value of error no : %d\n", errno);
printf("The error message is : %s\n", strerror(errno));
perror("Message from perror.");
return 0;
}

这是我的代码,但是当我删除“\n”时,perror 的执行顺序发生了变化。 谁能解释一下为什么?

很可能,stdout 处于行缓冲模式,因此它在 \n 上刷新,并且 perror 写入 stderr

perror 调用之前添加 fflush(stdout); 将修复它。