C语言 查看库函数执行失败原因

本文介绍了C语言中用于错误处理的errno、strerror和perror函数。errno是一个全局变量,当库函数执行失败时会设置其值以表示错误类型。strerror函数根据errno值返回对应的错误信息字符串,而perror函数则在标准错误输出设备上打印errno对应的错误信息,可配合自定义前缀。通过这两个函数,开发者能更准确地诊断程序运行时遇到的问题。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值