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的使用》。

perror()函数的使用的更多相关文章

  1. c中perror函数

    写代码这么久,竟然很少用到perror函数,忘记了其强大的功能. 所在头文件: #include<stdio.h> 函数定义: void perror(const char *str); ...

  2. Linux/Unix C编程之的perror函数,strerror函数,errno

    #include <stdio.h> // void perror(const char *msg); #include <string.h> // char *strerro ...

  3. 文件IO之——阻塞和非阻塞及perror函数

    读常规文件是不会阻塞的,不管读多少字节,read一定会在有限的时间内返回.从终端设备或网络读则不一定,如果从终端输入的数据没有换行符,调用read读终端设备就会阻塞,如果网络上没有接收到数据包,调用r ...

  4. strerror和perror函数详解

    /*#include <string.h> char *strerror(int errnum); 它返回errnum的值所对应的错误提示信息,例如errnum等于12的话,它就会返回&q ...

  5. 输入输出函数 I/O函数之perror()

    perror()函数的函数原型 void perror(char const *message); 它会将message信息输出出来,后面再加上错误原因字符串. 下面是来自百度百科的实例: #incl ...

  6. C和指针 第十五章 错误报告perror和exit

    15.1 错误报告 perror 任何一种程序都存在出错的可能,包括系统的函数库,当出现错误时,系统提示发生错误,标准库函数在一个外部整型变量中保存错误代码,然后把错误代码传给用户程序,提示错误原因. ...

  7. linux编程中接收主函数返回值以及错误码提示

    程序A创建子进程,并调用进程B,根据不调用的不同情况,最后显示结果不同. #include <stdio.h> #include <unistd.h> #include < ...

  8. (九)errno和perror、标准IO

    3.1.6.文件读写的一些细节3.1.6.1.errno和perror(1)errno就是error number,意思就是错误号码.linux系统中对各种常见错误做了个编号,当函数执行错误时,函数会 ...

  9. sqlite3_exec函数的使用

    sqlite3_exec函数的使用 sqlite3数据库是一个小型的关系型的数据库,以文件的方式存在,打开文件即是打开数据库,它小巧且功能强大,在嵌入式领域内使用很广.现在就介绍一下其中一个重要函数的 ...

随机推荐

  1. win10 下安卓源码同步小技巧

    win10下,通过 清华镜像源 AOSP 可以快速拿到 100G 的 .repo  备份 然后 用 repo sync 就可以得到 安卓源码,爽不爽! 下载到win10 e盘下,用powershell ...

  2. 交互-通过axios拦截器添加token认证

    通过axios拦截器添加token认证 一.通过axios请求拦截器添加token,保证拥有获取数据的权限 通常访问接口需要相关权限,通常是需要携带token如下所示 那如何在请求头中添加token? ...

  3. 统一UOS操作系统 修改源地址

    统一UOS操作系统 修改源地址 问题: 执行apt-get update的时候提示: root@sugon-PC:/etc/apt# apt-get update -y错误:1 https://uos ...

  4. Zabbix 架构

    Zabbix 架构 1.Zabbix Server Zabblx server是agent程序报告系统可用性.系统完整性和统计数据的核心组件,是所有配置信息.统计信息和操作数据的核心存储器. 2.Za ...

  5. mysql 无法执行select查询

    场景:mysql无法执行select命令查询,对于已存在的数据库,除了mysql.information_schema数据库,其它诸如nova.keystone.cinder等数据库都有此现象. 日志 ...

  6. Centos6.8安装mysql 步骤

    第1步.查看CentOS下是否已安装mysql 输入命令 :yum list installed | grep mysql 第2步.删除已安装mysql 输入命令:yum -y remove mysq ...

  7. shell初学之nginx(域名)

    创建两个以域名区分的虚拟网站: 1 #!/bin/bash 2 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/ ...

  8. 日常Bug排查-抛异常不回滚

    日常Bug排查-抛异常不回滚 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材_. Bug现场 最近有人反映java应用操作数据库的时候,抛异 ...

  9. node.js学习(4)事件

    1 导入事件库

  10. Spring的controller接受Date类型数据,接受枚举类型数据

    1. Controller接收Date类型的数据 核心使用@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 来将传递过来的时间字符串 ...