C语言获取函数调用错误信息方法-爱代码爱编程
一、初识
C语言中,有一个全局变量errno,存放了部分库函数调用过程中产生的错误码。
库函数的调用一般并不直接返回错误码,而是将错误码(是一个整数值,不同的值代表不同的含义)存入一个名为 errno 的全局变量中,errno 不同数值所代表的错误消息定义在 <errno.h> 文件中。
如果库函数调用失败,可以通过读出 errno 的值来确定问题所在,推测程序出错的原因。
特别注意:
1. 只有部分库函数才会设置全局变量errno的值。
2. 当系统调用函数调用成功运行时,errno 的值不会被修改,当然也不会主动被置为 0。
也就是说如果上一次调用有错误代码写入errno,那么下一次调用成功这个errno还会是之前的错误值。
这也意味着errno不能作为调用库函数失败的标志
二、获取errno中错误码对应的消息描述方式
strerror和perror两个库函数,可以很方便地查看出错的详细信息。
1. perror
perror 在 <stdio.h> 中声明,用于在屏幕上最近一次系统错误码消息描述,在实际开发中,我们写的程序运行于后台。
2. strerror
strerror 在 <string.h> 中声明,用于获取错误码对应的消息描述。
函数声明:
char *strerror(int errno);
函数说明:strerror()用来依参数errno 的错误代码来查询其错误原因的描述字符串,然后将该字符串指针返回。
返回值:返回描述错误原因的字符串地址。
在gcc4.4.7版本中,定义了131个错误代码,我们用程序把它们全部显示出来(下面是示例程序):
#include <stdio.h>
#include <string.h>
int main()
{
int errorno;
for(errorno=0;errorno<132;errorno++)
{
printf("%d:%s\n",errorno,strerror(errorno));
}
}
下面附上输出结果:
示例
#include <errno.h>
#include <stdio.h>
void main()
{
FILE * fp=fopen("aaaa","r");
if(fp==0)
{
printf("%d %s\n",errno,strerror(errno));//strerror示例
perror("perror res:");//perror示例
printf("fopen failed!\n");//可以认为打出出问题的地方
return ;
}
fclose(fp);
}