其他分享
首页 > 其他分享> > 出错处理

出错处理

作者:互联网

1.错误检查

函数执行失败时,一般都会返回一个特定的值,比如-1,空指针等等。这些值只能说明有错误发生,而不能指出错误的原因。头文件errno.h定义了变量errno,它存储了错误发生时的错误码,通过错误码可以得到错误信息的描述。

程序开始执行时,变量errno被初始化为0,。很多库函数在执行过程中遇到错误就会将errno设置为相应的错误码。注:不能根据errno的值来判断一个函数是否正常执行。

例程

#include<stdio.h>
#include<stdlib.h>
#include<errno.h>



int main()
{
	FILE *fp;
	char *filename = "only_root.txt";
	errno = 0;
	fp = fopen(filename, "r");
	if(fp == NULL)
		printf("open file %s failed, error is %d\n", filename, errno);
	else
		printf("open file %s successfully!\n", filename);
}

 运行结果

 

 2对应错误码ENOENT,得到出错原因是文件或目录不存在。

附一个errno错误码对照表链接

https://blog.csdn.net/ylwdi/article/details/24628927

2.错误的提示信息

当程序出现错误时,应当打印相应的错误提示信息,以便程序员发现并修改错误。函数strerror和perror可以通过错误码获取标准的错误信息提示。

strerror函数在头文件string.h中声明。

#include<string.h>
char *strerror(int errnum);

 strerror函数根据参数errnum提供的错误码获取一个描述错误信息的字符串,函数的返回值为指向该字符串的指针。errnum的值通常就是errno。

perror函数声明在头文件stdio.h中。

#include<stdio.h>
void perror(const char *massage);

 perror打印错误信息到stderr,stderr在Linux中通常就是屏幕或命令行终端。调用perror时。若参数message是一个空指针,perror仅仅根据errno打印出对应的错误提示信息。如果提供一个非空的值,perror会把此message加在其输出信息的前面。perror会添加一个冒号和空格将message和错误信息分开,以便区分。

例程

#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<stdlib.h>

FILE *open_file(char *filename)
{
	FILE *fp;
	errno = 0;
	fp = fopen(filename, "r");
	if(fp == NULL)
	{
		printf("Open file %s failed, reason is %s\n", filename, strerror(errno));
		exit(-1);
	}
	else
		return fp;
}

int main()
{
	char *filename = "ABC";
	open_file(filename);
	return 0;
}

 运行结果

 

 主程序调用open_file函数来打开文件名为ABC的文件,但是文件不存在,strerror通过errno的值将错误信息打印出来。

touch ABC后将权限更改以后再执行程序

 

 其实这里我们可以显然发现,strerror函数就是通过对照errno表,将其后的注释打印出来

比如

 

 

标签:perror,处理,errno,strerror,错误码,filename,出错,include
来源: https://www.cnblogs.com/area-h-p/p/11637826.html