strerror和perror函数的使用及其联系和区别
目录
一、strerror函数
1、函数原型
2、功能描述
3、错误码说明
4、示例代码
5、典型输出(Windows11+VS2022环境)
6、实际应用示例
二、perror函数
1、功能描述
2、示例代码
3、输出示例
三、对比总结
一、strerror函数
1、函数原型
char* strerror(int errnum);
2、功能描述
strerror
函数用于将错误码转换为对应的错误信息字符串。它接收一个错误码作为参数,返回该错误码对应的错误信息字符串的地址。
3、错误码说明
-
在不同的操作系统和C语言标准库实现中,都定义了一系列标准错误码
-
这些错误码通常定义在
errno.h
头文件中 -
C程序运行时使用全局变量
errno
来记录当前错误状态 -
程序启动时
errno
初始值为0,表示没有错误 -
当标准库函数发生错误时,会将对应的错误码存入
errno
4、示例代码
#include <errno.h>
#include <string.h>
#include <stdio.h>int main()
{// 打印0~10错误码对应的信息for (int i = 0; i <= 10; i++) {printf("%d: %s\n", i, strerror(i));}return 0;
}
5、典型输出(Windows11+VS2022环境)
6、实际应用示例
#include <stdio.h>
#include <string.h>
#include <errno.h>int main()
{FILE *pFile = fopen("unexist.ent", "r");if (pFile == NULL) {printf("Error opening file unexist.ent: %s\n", strerror(errno));}return 0;
}
二、perror函数
1、功能描述
perror
函数是另一种输出错误信息的方式,它会自动将错误码转换为可读的错误信息并输出。它会:
-
先输出传入的参数字符串
-
然后输出一个冒号和空格
-
最后输出对应的错误信息
2、示例代码
#include <stdio.h>
#include <errno.h>int main()
{FILE *pFile = fopen("unexist.ent", "r");if (pFile == NULL) {perror("Error opening file unexist.ent");}return 0;
}
3、输出示例
三、对比总结
函数 | 特点 |
---|---|
strerror | 只转换错误码为字符串,不直接输出,需要配合printf等函数使用 |
perror | 自动完成错误信息输出,包含自定义前缀和格式化,使用更简便 |
在实际编程中,可以根据需要选择使用strerror
或perror
来输出错误信息。perror
更适合简单的错误报告,而strerror
则提供了更大的灵活性,可以用于构建更复杂的错误信息。