C语言错误处理-输出错误信息

程序开发过程中,不可避免地会因为细节疏忽导致程序的编译、运行出错,当出现错误时编译器一般会将错误信息展示出来,但由程序操作或用户输入导致的错误往往会使程序直接崩溃并无任何的提示,此时,就需要一种方法能够用在程序可能出错的地方,当错误发生时可以提前将错误信息输出并中止运行,避免程序的崩溃、简化程序bug的查找。下面介绍C语言中几种用来主动输出错误信息的方法。

stderr

首先介绍stderr标准错误,在程序创建的同时会开启三个默认的流,分别为标准输入stdin、标准输出stdout和标准错误stderr,stdin默认指向键盘,stdout和stderr默认将数据输出到屏幕,也可以重定向输出到文件中。直接使用stderr是不会打印当前的错误信息的,它仅仅用来从输入中读取指定的信息然后再输出到指定的地方,这正是数据流的本意,数据从哪里来要到哪里去,所以,stderr还需要和能够读懂错误的函数进行配合使用。

关于stderr还有一点要注意,虽然同样默认指向屏幕进行数据流的输出,但不同于stdout的是,为了尽快的输出错误信息,stderr被设计为无缓冲的输出,即不需要待缓冲区(满缓冲和行缓冲)填满后再进行I/O操作,什么意思呢,举个例子:

fprintf(stdout,"Hello ");

fprintf(stderr,"World!");

Linux环境中stdout的输出方式是行缓冲,输出的字符会先存放在缓冲区,等按下回车键时才进行实际的I/O操作。而stderr是无缓冲输出,不需要等到换行符即可尽快的输出错误信息,因此,上述程序的打印结果为World!Hello。

errno

在菜鸟中看到这样的一段解释,C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个错误代码 errno,该错误代码是全局变量,表示在函数调用期间发生了错误。您可以在 errno.h 头文件中找到各种各样的错误代码。

打开errno.h头文件,可以看到许多对错误的定义,列举其中一部分

#define ECHILD 10

#define EAGAIN 11

#define ENOMEM 12

#define EACCES 13

#define EFAULT 14

#define EBUSY 16

#define EEXIST 17

#define EXDEV 18

#define ENODEV 19

#define ENOTDIR 20

据此可以得知,errno代表的是错误的编号,不同的编号对应不同的错误信息,用于对当前程序中出现的错误进行反馈:

fprintf(stderr, "错误号: %d\n", errno);

如果仅仅这样去输出错误的话,打印的只有该错误对应的数字号,并没有直观的错误信息,所以还需要配合其他函数进行使用。

perror()

perror()是一个C库函数,其函数原型为 void perror(const char *str) ,包含在stdio.h头文件中,该函数用于显示传给它的字符串 str,后跟上一个冒号、一个空格和当前 errno 值的文本表示形式,不需要将errno 值手动传递给该函数,其会根据当前的errno 值主动打印信息提示。例如:

perror("通过 perror 输出错误");

// 假设此时errno指向的错误信息为未找到指定文件

// 那么此时屏幕中会打印出:

// 通过 perror 输出错误: No such file or directory

在使用该函数前,最好将errno的值初始化为0,以此表示该程序目前无错误。

strerror()

C库函数strerror()的函数原型为char *strerror(int errnum),包含在string.h头文件中,其作用是从内部数组中搜索错误号 errno,并返回一个指向错误消息字符串的指针,该错误消息字符串用于描述当前程序中出现的错误。strerror 生成的错误字符串取决于开发平台和编译器。用法:

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

// 打印结果为

//Error: No such file or directory

c语言各种输出错误提示,C语言错误处理-输出错误信息相关推荐

  1. php 错误提示开启,php开启与关闭错误提示,php开启错误提示_PHP教程

    php开启与关闭错误提示,php开启错误提示 windows系统开关php错误提示 如果不具备修改php.ini的权限,可以将如下代码加入php文件中: 代码如下 复制代码 ini_set(" ...

  2. c语言中的错误提示,C语言20条编程中遇到的错误提示.doc

    C语言20条编程中遇到的错误提示 1. 代码: 编译器提示错误:error: else without a previous if 错误原因解读:'else'的前面没有匹配的'if' 2. 代码: 编 ...

  3. Laravel自定义错误提示语语言包

    1.下载语言包: 语言包git库: https://github.com/caouecs/Laravel-lang 这里面有68国语言,我这里只需要中文包,因此,我就在另外一个地方clone了这个仓库 ...

  4. php开启页面错误提示,php如何设置关闭网页错误提示

    php设置关闭网页错误提示的方法:1.在php程序代码中相关代码,代码为[error_reporting(E_ALL^E_NOTICE^E_WARNING)]:2.在phpini文件中将[displa ...

  5. sublime php错误提示,sublime中检查php语法错误

    [1 简介    在PHP文件保存时会自动进行语法检查,有错误会提示,没有错误不提示.*语法检查使用系统的php -l -n命令:*对非PHP文件不起作用: 2 下载(v1.1版本)    http: ...

  6. mysql 错误提示_Mysql必读mysql常见的错误提示问题处理小结

    <Mysql必读mysql常见的错误提示问题处理小结>要点: 本文介绍了Mysql必读mysql常见的错误提示问题处理小结,希望对您有用.如果有疑问,可以联系我们. 1.mysql服务无法 ...

  7. 服务器状态304,解析304状态码错误提示的原因与解决304错误提示的方法

    对于第304页的错误,一直是SEO工作人员老生常谈的话题.初始网站管理员对304错误非常敏感.互联网上总是有与之相关的新闻,比如:大量的304状态码会在网站上被降级,但这是真的吗? 一.304错误提示 ...

  8. php 屏蔽mysql错误提示_PHP.ini中配置屏蔽错误信息显示和保存错误日志

    在PHP程序运行过程中如果有错误发生,在浏览器上是否显示错误信息,以及显示错误信息的级别是我们在程序开发.调试.运营过程中需要控制的. root@(none):/alidata/www/default ...

  9. c语言编译常见错误提示,c语言编译常见错误

    c语言编译常见错误 (2012-04-17 21:33:53) 标签: 杂谈 分类: 计算机 1."c" not an argument in function sum 该标识符不 ...

最新文章

  1. 智能合约的核心思想、语法重点、编程模式、示例、规范及架构
  2. 在Azure上创建MYSQL服务
  3. 递归神经网络——就是解决AST这样的问题
  4. 使用录制宏制作工资条
  5. pku2229--sumsets(zjgsu,分花)
  6. python环境变量配置_21 python环境的配置
  7. vector 用法小例子
  8. mysql导入表格,txt操作(以及常见问题解决方法)
  9. 安卓游戏开发推箱子_保持冷静并砍箱子-开发
  10. linux下gdb常用的调试命令
  11. tensorflow实现回归
  12. 人工智能时代,我们需要什么样的芯片?| 码书
  13. Swift TouchId指纹解锁,FaceId面部解锁
  14. 关于利用背景减除法的固定摄像头的移动侦测算法
  15. 《 PHP+H5全栈工程师培训项目实战》
  16. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记6——四大变换光照与材质
  17. 困牛放牧(Sleepy Cow Herding)
  18. 为powerpc编译mtd-utils工具
  19. volatile限定符
  20. Jace Config

热门文章

  1. 计算机(了解)\注释\变量\数据类型\格式化输出\debug
  2. [OHIF-Viewers]医疗数字阅片-医学影像-中间插播一下-es6-使用const加箭头函数声明函数相对于function声明函数有什么好处?...
  3. 桃词典 Peach Dictionary 简易英语词典app开发 安卓软件开发 Part 2
  4. jieba,为中文分词而生的Python库
  5. 开源软件负载均衡方案比较
  6. ShardingJDBC使用总结
  7. android获取网络图片方法,Android获取网络图片并显示的方法
  8. Titan图形数据库的应用实例讲解
  9. unity 跨平台动态生成二维码 免费下载
  10. AirpodsPro 使用技巧