C语言获取函数调用错误信息方法

一、初识

C语言中,有一个全局变量errno,存放了部分库函数调用过程中产生的错误码。
库函数的调用一般并不直接返回错误码,而是将错误码(是一个整数值,不同的值代表不同的含义)存入一个名为 errno 的全局变量中,errno 不同数值所代表的错误消息定义在 文件中
如果库函数调用失败,可以通过读出 errno 的值来确定问题所在,推测程序出错的原因。
特别注意:

 1. 只有部分库函数才会设置全局变量errno的值。
 2. 当系统调用函数调用成功运行时,errno 的值不会被修改,当然也不会主动被置为 0。
 	也就是说如果上一次调用有错误代码写入errno,那么下一次调用成功这个errno还会是之前的错误值。
 	这也意味着errno不能作为调用库函数失败的标志

二、获取errno中错误码对应的消息描述方式

strerror和perror两个库函数,可以很方便地查看出错的详细信息。
1. perror
perror 在 中声明,用于在屏幕上最近一次系统错误码消息描述,在实际开发中,我们写的程序运行于后台。

2. strerror
strerror 在 中声明,用于获取错误码对应的消息描述。

函数声明:
char *strerror(int errno);

函数说明:strerror()用来依参数errno 的错误代码来查询其错误原因的描述字符串,然后将该字符串指针返回。

返回值:返回描述错误原因的字符串地址。

在gcc4.4.7版本中,定义了131个错误代码,我们用程序把它们全部显示出来(下面是示例程序):
#include 
#include 
 
int main()
{
  int errorno;
 
  for(errorno=0;errorno<132;errorno++)
  {
    printf("%d:%s\n",errorno,strerror(errorno));
  }
}
下面附上输出结果:

C语言获取函数调用错误信息方法_第1张图片

示例

#include 
#include 

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);
}

补充知识

你可能感兴趣的:(C,c语言)