找回密码
 register

QQ登录

只需一步,快速开始

查看: 18|回复: 0

[C++] C++ perror

[复制链接]

[C++] C++ perror

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:243
  • 打卡月天数:20
  • 打卡总奖励:241
  • 最近打卡:2025-07-22 08:02:38
Waylee

主题

0

回帖

2万

积分

仙帝

积分
26280
Waylee 2025-7-19 01:18 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×

概览

  • errno 对应的错误信息和自定义提示一起输出到 stderr
  • 适用于文件、内存、网络等系统调用失败后的快速诊断

语法

#include <stdio.h>
#include <errno.h>

void perror(const char *s);
  • 参数

    • s:前缀提示字符串
  • 输出格式

    s: <errno 对应的错误描述>\n

行为特点

  • 读取:全局变量 errno
  • 输出:直接写入 stderr(无缓冲,立即生效)
  • strerror 等价

    fprintf(stderr, "%s: %s\n", s, strerror(errno));

示例:打开不存在的文件

#include <cstdio>    // fopen, fprintf, stderr
#include <errno.h>   // errno
#include <string.h>  // strerror  —— C 风格头文件

int main() {
    FILE *fp = fopen("no_file.txt", "r");
    if (!fp) {
        perror("打开文件失败");
        // 输出示例:打开文件失败: No such file or directory
        // fprintf等价写法:
        fprintf(stderr,
            "%s: %s\n",
            "打开文件失败",      // 自定义提示
            strerror(errno)     // 根据 errno 获取错误描述
        );
    }
    return 0;
}

errno 常见值

常量 含义
ENOENT No such file or directory
EACCES Permission denied
ENOMEM Out of memory
EEXIST File exists
EBADF Bad file descriptor

更多错误码请参考 man 3 errno

注意事项

  • 仅在失败分支调用 perror,避免误输出
  • 成功时不要依赖或清零 errno
  • 若需更灵活格式,可结合 fprintf(stderr, ...)strerror(errno)

C++ 风格

#include <cstdio>
std::perror("操作失败");  // 与 C 方式等效
您需要登录后才可以回帖 登录 | register

本版积分规则

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |网站地图|天天打卡

GMT+8, 2025-7-22 19:49 , Processed in 0.098605 second(s), 5 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

快速回复 返回顶部 返回列表