跳转到内容

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 权限不足

数学表达(可选)[编辑 | 编辑源代码]

若需量化错误概率,可表示为: Perror=错误次数总操作次数

总结[编辑 | 编辑源代码]

  • strerrorerrno转换为可读字符串,简化调试。
  • 多线程环境中优先使用strerror_r
  • 结合perror可快速输出错误到标准错误流。

参见[编辑 | 编辑源代码]