perror和strerror的问题

C语言 码拜 9年前 (2016-04-16) 925次浏览
#include<stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
        FILE *fp=fopen("/linux/uc/day02","r");
        if(fp==NULL)
        {
                printf("errno=%d\n",errno);
                printf("%d:%s",errno,strerror(errno));
                perror("ff");
        }
        return 0;
}

输出的结果很奇怪,先输出perror(“ff”)然后在输出 printf(“%d:%s”,errno,strerror(errno));为什么次序颠倒了呢?
perror和strerror的问题

解决方案

20

perror是无缓冲:无缓冲指的是标准的IO库不对字符进行缓冲存储
printf是行缓冲: 在这种情况下,标准的IO在输入和输出中遇到换行符执行IO操作;注意,当流涉及终端时,都使用行缓冲.

5

在每个最后不带\n的printf后面加fflush(stdout);

5

补充一点,perror 是打到 stderr 上的,不是 stdout 。它们会有独立的缓冲。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明perror和strerror的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)