• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

茗若然

书山有路勤为径,学海无涯苦作舟。
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

perror()函数的使用

        perror()函数的功能是打印一个系统错误信息。
        perror()函数在Linux系统中属于库函数,在头文件中有如下定义:


        #include <stdio.h>
        void perror(const char *s);

 
perror()函数的使用细节
        当程序的当前函数(这类函数包括系统函数和库函数)出现错误,会将错误值保存在errno这个全局变量中,然后当程序执行到perror()函数的时候,会先打印参数s中的字符串,接着打印一个冒号,和errno值对应的错误描述字符串。因此在使用perror()函数的时候也要引用头文件errno.h,因为errno这个全局变量定义在这个头文件中。
这其中也隐含这一个使用技巧,就是s参数字符串应该包含导致错误的函数的名称。这样在打印错误信息的时候,会使定位的错误位置更加准确。
同时也要注意一个问题,就是在函数执行成功的时候,不要调用perror()函数,因为在函数成功执行的时候errno是未定义的变量,即便打印出错误信息,也是它在内部使用了其他失败的库函数。例如:

1 int * p = NULL;
2 p = (int *)malloc(sizeof(int));
3 if(p == NULL)
4 {
5     perror("malloc error , no memory");
6     exit(1);
7 }

        上述程序是申请动态内存,如果申请失败即p指针为空,则调用perror()函数打印错误信息。千万不要在p!=NULL的时候调用perror()函数,此时malloc()函数执行成功,已经申请到内存并返回指针给p,p不为空。

        errno的错误字符串是英文缩写,若要查阅具体的错误可参阅《errno的使用》。

posted on 2021-06-23 22:33  茗若然  阅读(4513)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3