C 语言 strerror 函数
外观
strerror函数是C标准库(<errno.h>
)中用于将错误代码转换为可读字符串的工具,常用于调试和错误处理。本条目详细介绍其语法、用法、实际案例及注意事项。
概述[编辑 | 编辑源代码]
strerror
函数的原型如下:
#include <string.h>
char *strerror(int errnum);
- 参数
errnum
:错误代码(通常为全局变量errno
的值)。 - 返回值:指向描述错误的静态字符串的指针。
工作原理[编辑 | 编辑源代码]
当系统调用或库函数失败时,它们通常设置全局变量errno
为一个特定值。strerror
通过此值返回对应的错误描述字符串。
错误代码示例[编辑 | 编辑源代码]
以下代码演示如何获取并打印错误信息:
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main() {
FILE *file = fopen("nonexistent.txt", "r");
if (file == NULL) {
printf("Error: %s\n", strerror(errno));
}
return 0;
}
输出(假设文件不存在):
Error: No such file or directory
实际应用场景[编辑 | 编辑源代码]
场景1:文件操作失败处理[编辑 | 编辑源代码]
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main() {
FILE *file = fopen("/protected/file.txt", "w");
if (file == NULL) {
fprintf(stderr, "Failed to open file: %s\n", strerror(errno));
return 1;
}
fclose(file);
return 0;
}
输出(若权限不足):
Failed to open file: Permission denied
场景2:多线程环境注意事项[编辑 | 编辑源代码]
strerror
返回的字符串指针指向静态内存,多线程中需使用线程安全版本strerror_r
(POSIX标准):
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main() {
char buf[256];
strerror_r(errno, buf, sizeof(buf));
printf("Error: %s\n", buf);
return 0;
}
错误代码与描述对照表[编辑 | 编辑源代码]
以下是常见errno
值及其含义:
错误代码 | 宏定义 | 描述 |
---|---|---|
1 | EPERM |
操作不允许 |
2 | ENOENT |
文件或目录不存在 |
13 | EACCES |
权限不足 |
数学表达(可选)[编辑 | 编辑源代码]
若需量化错误概率,可表示为:
总结[编辑 | 编辑源代码]
strerror
将errno
转换为可读字符串,简化调试。- 多线程环境中优先使用
strerror_r
。 - 结合
perror
可快速输出错误到标准错误流。