errno

  • C语言不提供对错误处理的直接支持。
  • 以返回值的形式表示是否出错。

  • 在发生错误时,大多数的C函数调用返回1或NULL。
  • 同时设置一个错误代码errno(全局变量),表示在函数调用期间发生了错误。
#include <errno.h> 或 #include <stdlib.h>
  • 可以通过检查返回值,然后根据返回值决定怎么处理
  • 把errno设置为0(没有错误),是一种良好的编程习惯
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main() {errno = 0;// 平方根int y = sqrt(-1);printf("errno = %d\n",errno);if (errno != 0) {printf("程序出错...\n");}
}
此代码中errno=33,是一个宏定义。
#define EDOM 33 /* Math argument out of domain of func */

更多errno点击这里查看

perror()和strerror()

  • perror()显示错误信息
    来自:stdio.h
  • strerror(errno)将错误信息返回一个指针,指向描述错误信息的字符串
    来自:string.h
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <math.h>
main() {errno = 0;// 平方根int y = sqrt(-1);printf("errno = %d\n",errno);perror("perror报错");printf("strerror报错: %s\n", strerror(errno));if (errno!=0) {printf("程序出错...\n");}
}
errno = 33
perror报错: Domain error
strerror报错: Domain error
程序出错...

应用举例

#include <stdio.h>
#include <errno.h>
#include <string.h>
extern int errno ;
main () {FILE * pf;errno = 0;pf = fopen ("unexist.txt", "rb");if (pf == NULL) {printf("错误号: %d\n", errno);perror("perror报错");printf("strerror报错: %s\n", strerror(errno));} else {fclose (pf);}
}

*诊断·断言

#include <stdio.h>
#include <assert.h>
main() {int n1 = 1;int n2 = 0;// 不满足条件,中断assert(n2!=0);int n3 = n1/n2;printf("---%d---",n3);
}
Assertion failed!Program: C:\Users\AndyMi\Documents\C\Project3.exe
File: main.c, Line 10Expression: n2!=0This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

*使用信号处理错误

include <signal.h>提供了处理异常情况的工具,称为“信号”。

  • signal()函数安装一个信号处理函数。

  • raise()触发信号。

#include <stdio.h>
#include <signal.h>void printErr(int sig) {printf("出现错误%d", sig);
}
main () {//说明://被安装的函数需要一个参数//这个参数是信号编码//这里使用SIGINT宏,表示终止进程或中断进程,对应为2signal(SIGINT, printErr);int n1 = 10;int n2 = 0;if (n2 == 0) {raise(SIGINT);} else {printf("除法结果为:%d", n1/n2);}
}

转载于:https://www.cnblogs.com/tigerlion/p/11191708.html

C语言讲义——错误处理相关推荐

  1. Go 分布式学习利器(14)-- Go语言的错误处理

    1. Go 的错误机制 Go 语言的错误机制中与其他语言的主要差异如下: 没有异常机制 error 类型实现了 error接口 type error interface {Error() string ...

  2. Python语言环境错误:不支持的语言环境设置

    本文翻译自:Python locale error: unsupported locale setting Why do I get the following error when doing th ...

  3. c语言编译错误 原文,C语言常见错误与警告

    C语言常见错误与警告 C语言常见错误与警告C语言常见错误: 1 invalid type argument of '->' (have 'struct qstr_xid_element') 这种 ...

  4. c语言Max错误,C语言编程常见错误.pdf

    C 语言常见错误 版权声明:以下内容来自互联网 C 语言的最大特点是:功能强.使 方便灵活.C 编译的程序对语法检查并不象其它高级语言那么严 格,这就给编程人员留下 "灵活的余地" ...

  5. 计算机输入输出c语言,计算机等级考试二级C语言讲义第三讲输入输出函数

    <计算机等级考试二级C语言讲义第三讲输入输出函数>由会员分享,可在线阅读,更多相关<计算机等级考试二级C语言讲义第三讲输入输出函数(5页珍藏版)>请在人人文库网上搜索. 1.第 ...

  6. 北大c语言百度云资源,北大C语言讲义.pdf

    北大C语言讲义 第一部分内容 1.计算机的历史与发展 第一部分 2.计算机的基本原理.计算机结构 3.计算机的抽象模型和基本问题 计算机基础 引言 计算机 现代计算机的历史始于 20世纪40年代后期. ...

  7. c语言辗转相除法不同规模的情况,C语言讲义终极勘误版.doc

    C语言讲义终极勘误版 C语言讲义 I.基本数据类型 整 型 类型说明符存储范围所占字节(B)int-231 ~ 231-14short (int)-215 ~ 215-12signed (int)-2 ...

  8. 南京理工大学c语言课程设计,南京理工大学C语言讲义第7章.ppt

    南京理工大学C语言讲义第7章 * 静态局部变量:static 在函数内部定义,存储在静态存储区,与auto对应,在别的函数中不能引用. 全局静态变量:static 在函数外部定义,只限在本文件中使用, ...

  9. 哈工大c语言第四版pdf,哈工大C语言讲义 指针.pdf

    哈工大C语言讲义 指针 指针 指指指针针针 数组与指针 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 指指指针针针 数组与指针 p a[0] a[ ...

最新文章

  1. 数据库中数据类型和约束(整数类型、字符串、时间类型)
  2. fft 估计载波频率程序_OFDM信道估计和仿真
  3. python note
  4. [Leetcode] Simplify Path
  5. TWaver版3D化学元素周期表
  6. 全注解怎么使用分页插件_分页插件使用的方式
  7. Qt eventFilter实现信号与槽
  8. call,apply,bind的用法与区别
  9. c++矩阵连乘的动态规划算法并输出_你在Java中用过动态规划吗?
  10. C++ 梳理(一):跑通简单程序
  11. JS-概述-基本语法-变量-数据类型
  12. 继续研究 SO_KEEPALIVE 问题
  13. 对战 | RabbitMq 大战 kafka
  14. JAVA利用google的zxing解析二维码QRCODE
  15. openresty入门与配置了解
  16. PAT-乙级-1031. 查验身份证(15)
  17. 基于Windows NBL配置WebInterface
  18. NFC reader ( ISO 15693 ) NFC相关技术详解(附源代码)
  19. 2022年危险化学品生产单位安全生产管理人员考试题模拟考试平台操作
  20. 体育赛事直播系统的实践之路

热门文章

  1. java学习顺序(学习路线图)
  2. Django连接mysql数据库步骤非常详细
  3. 【NLP】from glove import Glove的使用、模型保存和加载
  4. Real-Time Rendering——Chapter 7 Advanced Shading
  5. word中使用mathtype插入公式编号出现Equation Chapter (Next) Section 1字样
  6. 16.数据统计之数据分组方法
  7. 干细胞膜包载鱼精蛋白/胰岛素/5-氟脲嘧啶/盐酸伐昔洛韦纳米药物(细胞膜纳米仿生物)
  8. Python实现屏幕截图的两种方式
  9. ECharts3中的图表大小自适应
  10. 2.Echarts柱状图最详解析及示例