认识strerror
库函数调用失败的时候会产生错误码,而每一个错误码对应着一条错误信息,strerror函数的作用就是将错误码给转化成错误信息。
在C语言中有一条全局的错误码errno,在程序运行过程中,只要库函数调用失败,我们就会把此处产生的错误码放入变量errno中。
返回值和参数:char * strerror ( int errnum );
该函数的参数就是一个错误码,输入该错误码后,经函数内部处理,将该错误码转化成一条错误信息(类型是字符串)并将该错误信息(字符串)的地址返回。
示例
#include<stdio.h>
#include<string.h>
#include<errno.h>
int main()
{
FILE* pf = fopen("unexist.ent", "r");
if (pf == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
fclose(pf);
pf = NULL;
return 0;
}
该代码中,FILE是一种代表“文件”的数据类型,fopen是一个功能为打开文件/文件夹的函数,参数是由文件夹名所构成的字符串(的地址),还有打开的方式对应字符串。如果找不到对应的文件夹,则返回空指针。
该代码的结果是
值得注意的是,因为该函数仅仅是将错误码转化成错误信息,但却只返回错误信息地址而并没有将他打印出来,所以我们需要再借用printf函数将它打印出来。
那有没有不需要借用printf直接一步到位的函数呢?
答案是有的,他就是perror函数。
perror函数介绍
该函数集转换和打印功能于一身,它会自动读取之前产生的错误码,将其转换成错误信息并且将它打印出来。
示例如下:
int main()
{
FILE* pf = fopen("unexist.ent", "r");
if (pf == NULL)
{
printf("%s\n", strerror(errno));
perror("我要上北大");
return 1;
}
fclose(pf);
pf = NULL;
return 0;
}
结合图片和代码可以看出,perror函数无需输入就可以读取错误码并完成其转换和打印工作,并且在perror函数后的小括号中插入一个字符串,该字符串会同步得传到打印的错误信息的前面(中间隔了一个“:”和“ ”(空格))。