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 10 Expression: n2!=0 This 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宏,表示终止进程或中断进程,对应为2
signal(SIGINT, printErr);
int n1 = 10;
int n2 = 0;
if (n2 == 0) {
raise(SIGINT);
} else {
printf("除法结果为:%d", n1/n2);
}
}

C语言讲义——错误处理的更多相关文章

  1. C语言常见错误中英文对照表

    C语言常见错误中英文对照表(网络搜索及经验积累不断更新中) 常见错误中英文对照表 fatal error C1003:  error count exceeds number; stopping co ...

  2. [日常] Go语言圣经-错误,函数值习题

    Go语言圣经-错误 1.panic异常.panic是来自被调函数的信号,表示发生了某个已知的bug 2.任何进行I/O操作的函数都会面临出现错误的可能 3.错误是软件包API和应用程序用户界面的一个重 ...

  3. 如何处理C++构造函数中的错误——兼谈不同语言的错误处理

    用C++写代码的时候总是避免不了处理错误,一般来说有两种方式,通过函数的返回值或者抛出异常.C语言的错误处理一律是通过函数的返回值来判断的,一般是返回0.NULL或者-1表示错误,或者直接返回错误代码 ...

  4. 常见C语言编译错误解析【转】

    C语言编译错误信息及说明1. 在函数 ‘transform’ 中:7: 错误:expected ‘;’ before ‘{’ token    解释:‘{’之前的某个语句缺少分号‘;’: 2. 在函数 ...

  5. 【Go语言】错误与异常处理机制

    ①error接口 Go语言中的error类型实际上是抽象了Error()方法的error接口 type error interface { Error() string } Go语言使用该接口进行标准 ...

  6. 常见C语言内存错误

    前言 C语言强大的原因之一在于几乎能掌控所有的细节,包括对内存的处理,什么时候使用内存,使用了多少内存,什么时候该释放内存,这都在程序员的掌控之中.而不像Java中,程序员是不需要花太多精力去处理垃圾 ...

  7. 多语言业务错误日志收集监控工具Sentry 安装与使用

    Sentry 是一个实时事件日志记录和汇集的平台.其专注于错误监控以及提取一切事后处理所需信息而不依赖于麻烦的用户反馈. Sentry是一个日志平台, 它分为客户端和服务端,客户端(目前客户端有Pyt ...

  8. Go 语言基础——错误处理

    #### 学习目标 掌握错误处理 掌握自定义错误处理 掌握defer关键字的使用 ------ #### 错误处理 GO没有异常处理机制 Go语言引入了一个关于错误处理的标准模式,即error接口,该 ...

  9. go语言的错误处理

    1.系统自己抛异常 //go语言抛异常 func test3_1() { l := [5] int {0,1,2,3,4} var index int = 6 fmt.Println(l) l[ind ...

随机推荐

  1. linux系统中firewalld防火墙管理工具firewall-config(GUI图形用户界面)

    firewall-config是firewalld防火墙管理工具的GUI(图形用户界面)版本,几乎可以实现所有以命令行来执行的操作. firewall-config的界面如下图(在终端直接运行fire ...

  2. mysql报错10061和10038

    用navicat连接报错10038,用sqlyog报错10061,又去查看服务,发现服务丢失 经过一系列的查阅资料,用下面的方式解决了问题 1.用管理员的方式打开命令行窗口 2.进入mysql的bin ...

  3. Python3网络学习案例三:编写web server

    1. 写在前面 这里总结的并不够详细,有时间了再进行补充. 2. 设计思路 HTTP协议是建立在TCP上的1. 建立服务器端TCP套接字(绑定ip,port),等待监听连接:listen(2. 打开浏 ...

  4. Polyglot Translators: Let's do i18n easier! 一款国际化插件小助手!

    在做国际化文本有关的工作时, 是否厌倦了在不同应用或者网页之间频繁地切换进行中文, 繁体, 英文甚至韩文日文的文本翻译工作? 好吧, 我就是受不了频繁在进行文本字符串的转换, 还得跑到百度翻译上面搜索 ...

  5. ubuntu18.04 安装RabbitVCS

    因为仓库安装一直安装不上所以手动安装 第一步:下载 https://github.com/rabbitvcs/rabbitvcs/ 安装 解压安装 python setup.py install -- ...

  6. 鸿蒙开发板外设控制 之 实现物理按键的“长按事件”(按键通用框架 V0.0.2)

    我在之前的帖子<实现按键"按下事件"和"释放事件"的通用框架(V0.0.1)>中阐述了DTButton-V0.0.1的设计思路,并且也在帖子中开源了 ...

  7. 使用bootstrap fileinput多文件拖拽上传的记录

    今天琢磨文件上传,刚好看到bootstrap 我就搜了一下,刚刚能满足需求,使用上手也很快,使用完还是记录下来. 1.首先我们下载插件包,可以用nuget搜索bootstrap-fileinput 也 ...

  8. springboot mybatis保存数据中文保存成???

    springboot mybatis保存数据中文保存成??? 解决方法: 数据库存连接配置后面加characterEncoding=UTF-8 如下例: spring.datasource.url=j ...

  9. Pandas_工资集处理

    import numpy as np import pandas as pd from pandas import Series,DataFrame # 1--读取数据文件 file_obj=open ...

  10. linux c语言 哲学家进餐---信号量PV方法一

    1.实验原理   由Dijkstra提出并解决的哲学家进餐问题(The Dinning Philosophers Problem)是典型的同步问题.该问题是描述有五个哲学家共用一张圆桌,分别坐在周围的 ...