cpp strerror、errno、perror

⌚Time: 2023-12-22 19:26:36

👨‍💻Author: Jack Ge

来自AI回答

errnostrerror()perror() 的关系与区别

这三个是 C/C++ 中用于处理系统调用或库函数错误的机制:


errno — 错误码变量

#include <cerrno>
extern int errno;  // 本质是这样

strerror() — 错误码转字符串

#include <cstring>
std::cout << strerror(errno) << std::endl;  // 输出如 "No such file or directory"

perror() — 直接打印错误信息

#include <cstdio>
FILE* f = fopen("nonexist.txt", "r");
if (!f) {
    perror("打开文件失败");  // 输出: 打开文件失败: No such file or directory
}

典型用法对比

功能 errno strerror() perror()
作用 存储错误码 错误码 → 字符串 直接打印错误信息
输出位置 不输出 返回字符串 stderr
灵活性 可自行判断 可自定义输出格式 简单快速打印
// 组合使用示例
if (open("file.txt", O_RDONLY) == -1) {
    // 方式1: 使用 perror 直接打印
    perror("open失败");
    
    // 方式2: 使用 strerror 自定义输出
    std::cerr << "open失败: " << strerror(errno) << std::endl;
    
    // 方式3: 仅获取错误码做逻辑判断
    if (errno == ENOENT) {
        std::cout << "文件不存在" << std::endl;
    }
}

注意事项