C语言 查看库函数执行失败原因
一、 errno 是什么
C语言提供了许多库函数方便我们使用。当一个库函数执行失败时候,可以查看errno对应的错误信息了解库函数执行失败准确原因。
errno:错误代码,一个int类型变量,在<errno.h>
中定义,每个错误代码值对应一个错误信息字符串,任何库函数都可以将其值修改为不同于零的某个值,通常用于指示特定类别的错误信息
注意:只有当一个库函数执行失败时,才会设置errno。当库函数成功执行时,errno的值不会被修改。这意味我们不能通过测试errno的值判断是否有错误发生,而只有库函数执行失败时检查errno的值才有意义
二、 strerror函数
strerror函数功能:
打印错误代码对应的错误信息
库函数strerror函数声明
char * strerror ( int errnum );
返回值:返回错误信息字符串的起始地址
errnum :错误代码值或errno
测试1:
#include <stdio.h>
#include <errno.h>
int main()
{
FILE* pf = fopen("file.txt", "r"); //打开文件,文件file.txt本身不存在,函数执行会错误返回NULL指针,并修改errno值
if (NULL == pf)
{
printf("%s\n", strerror(errno)); //打印errno对应错误信息
return -1;
}
printf("打开文件成功\n");
fclose(pf); //关闭文件
pf = NULL;
return 0;
}
输出
No such file or directory
测试2:
#include <stdio.h>
#include <errno.h>
int main()
{
printf("%s\n", strerror(1)); //打印错误代码值1对应错误信息
printf("%s\n", strerror(2)); //打印错误代码值2对应错误信息
printf("%s\n", strerror(3)); //打印错误代码值3对应错误信息
return 0;
}
输出
Operation not permitted
No such file or directory
No such process
三、 perror函数
perror函数功能:
打印errno对应的错误信息
库函数perror函数声明
void perror ( const char * str );
str : 当str不是NULL指针并且指向一个非空的字符串,perror函数先打印这个字符串,后面跟一个冒号和一个空格,然后打印errno对应的错误信息
测试:
#include <stdio.h>
#include <errno.h>
int main()
{
FILE* pf = fopen("file.txt", "r"); //打开文件,文件file.txt本身不存在,函数执行会错误返回NULL指针,并修改errno值
if (NULL == pf)
{
perror(NULL); //直接打印errno对应错误信息
perror("fopen"); //首先打印fopen字符串,然后打印errno对应错误信息
return -1;
}
printf("打开文件成功\n");
fclose(pf); //关闭文件
pf = NULL;
return 0;
}
输出
No such file or directory
fopen: No such file or directory