出错处理
•
1.使用标准错误输出
例子: 判断键盘上输入的字符是不是 0-9
#include <stdio.h>
main()
{
char ch;
scanf("%c",&ch);
if(!isdigit(ch))
{
fprintf(stderr,"Please input a digit char\n");
}
}
打印errno的值:
printf("errno is: %d\n",errno);
•
2.使用errno全局变量 ,errno中的内容应该在出错后立即使用,因为出错后不立即使用,可能在调用其他函数时又产生了错误,导致errno的原有值呗覆盖!
a. 使用 perror
#include <stdio.h>
main()
{
FILE *fp;
if((fp = fopen("./test.txt","r")) == NULL)
{
perror("fopen");
return;
}
printf("Open file success!\n");
fclose(fp);
return;
}
b. 使用全局变量 erron
#include <stdio.h>
#include <errno.h>
main()
{
FILE *fp;
if((fp = fopen("./test.txt","r")) == NULL)
{
fprintf(stderr,"fopne faild%s\n",strerror(errno));
return;
}
printf("Open file success!\n");
fclose(fp);
return;
}
•
3.使用出错信号处理 : 使用标准错误输出和errno变量进行错误处理,都是在可以预知的情况下进行的错误处理,所以预先编码进行错误处理,除此之外还有一种错误,是编码人员不知道何时会出现异常,此时就可以使用信号进行错误处理
例子:在被0除 的情况下,系统内核将向进程发送信息SIGFPE,编程人员可以在程序中捕获该信号进行处理
#include <stdio.h>
#include <errno.h>
#include <signal.h>
void Handle_Sigfpe(int signo)
{
fprintf(stderr,"%d\n",signo);
fprintf(stderr,"catch the signal!\n`");
exit(0);
}
main()
{
int i,m,n;
if(signal(SIGFPE,Handle_Sigfpe) == SIG_ERR)
{
perror("signal");
return;
}
for(i=0;i<10;i++)
{
scanf("%d %d",&m,&n);
printf("%d / %d = %d\n",m,n,m/n);
}
}
•
4.使用assert断言
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
int main( void )
{
FILE *fp;
fp = fopen( "test.txt", "w" ); //以可写的方式打开一个文件,如果不存在就创建一个同名文件
assert( fp ); //所以这里不会出错
fclose( fp );
fp = fopen( "noexitfile.txt", "r" ); //以只读的方式打开一个文件,如果不存在就打开文件失败
assert( fp ); //这里出错
fclose( fp ); //该语句将不会执行
return 0;
}
•
5.内存泄露的检查
•
6.其他可能的内存错误
分享到:
相关推荐
- **第四讲:** 存储器与指针,掌握内存管理与指针操作。 - **第五讲:** 数据结构与链表,学习高效的数据组织方式。 - **第六讲:** 中断与设备驱动,探索嵌入式系统的实时响应机制。 - **第七讲:** 编码风格,...
在本资源"AKA Linux编程系列讲座第二期的所有资料"中,您将深入学习Linux操作系统下的编程技术。这个系列讲座的第二期是一个精心设计的教程,旨在为初学者提供一个全面且详细的指导,涵盖了大量的理论知识和实践案例...
- **Gdb调试技术**:利用Gdb进行程序调试的方法。 - **Autoconf**:用于自动生成配置脚本的工具。 - **Automake**:用于自动生成Makefile文件。 - **Makefile**:介绍Makefile的基本语法与编写技巧。 - **代码...
- **参考资料:** 韦东山《Linux应用开发完全手册》第四章、魏永明《Linux设备驱动程序》、宋宝华《Linux设备驱动开发详解》等。 - **参考视频:** 韦东山视频第二期至第四期、国嵌精通嵌入式系列教程的第四季和第五季...
通过这个实验,学生不仅能巩固C语言的基础知识,还能提升在Linux操作系统中的实际编程技能,学会使用Makefile组织和管理项目,以及使用gdb进行程序调试。这对于今后的软件开发和系统级编程工作具有重要的实践价值。
《Linux环境C程序设计》是徐诚先生在清华大学出版社出版的第二版教材,该书深入浅出地介绍了在Linux操作系统下进行C语言编程的基础知识和高级技巧。此资源包含源码和PPT,为读者提供了丰富的实践材料和教学辅助资料...
### 嵌入式Linux应用程序开发详解 #### 一、嵌入式Linux基础 - **Linux发展概述**:自1991年Linus Torvalds发布第一个版本以来,Linux经历了快速的发展,逐渐成为最流行的开源操作系统之一。它不仅被广泛应用于...
《C-Primer-Plus(第6版)(中文版)1》是一本关于C语言编程的入门书籍,适合初学者了解和学习C语言的基础知识。书中涵盖了C语言的起源、特性和应用范围,以及如何使用C语言进行程序设计的全过程。 1. C语言的起源:...
### Linux操作系统复习知识点 #### 1. 网络协议中的面向连接协议 - **传输控制协议(TCP)**:TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,它确保了数据包的可靠传输,适用于需要高可靠性的应用场景...
《21天学通Linux C编程(第2版)》是一本旨在帮助初学者快速掌握Linux环境下C语言编程技能的教程。光盘内容包括了学习过程中至关重要的辅助材料,如电子教案(PPT)、习题参考答案以及源代码,这些资料对于深入理解...
从给定的文件信息中,我们可以总结出一系列与NOI(National Olympiad in Informatics,全国青少年信息学奥林匹克竞赛)笔试复习相关的IT知识点,主要集中在Linux操作系统的基本操作、编程语言概念以及程序调试等方面...
- **第4、5周**:转向更高级的语言——C++,掌握面向对象的程序设计。 - **周一**:介绍面向对象的基本概念。 - **周二**:学习C++的基本输入输出、new和delete操作符等。 - **周三**:深入探讨类和对象的相关...
在嵌入式Linux开发中,GDB是一个常用的远程调试工具,GDB在宿主机上运行,通过GDBServer与目标机上的被调试程序通信。因此,选项D“被调试程序在宿主机上运行”是错误的。 常见的嵌入式GUI包括QTC、GNOME和MiniGUI...
《Linux操作系统(下)》复习题涉及到的知识点广泛,涵盖Linux系统的使用、调试工具、编程编译、文件管理、系统命令、权限、环境变量、进程管理、网络协议等多个方面。以下是对这些知识点的详细解释: 1. `gdb` 是GNU...
《Linux高级程序设计》第三版,由杨宗德教授撰写,是一本深入探讨Linux系统下程序开发的经典著作。这本书不仅涵盖了基本的编程概念,还详细讲解了如何在Linux环境中进行高效的程序设计。杨宗德教授以其丰富的教学和...
在题目中提到的命令中,`p n`用于打印变量n的值,`/b n`是在第n行设置断点,`/info n`显示断点信息,`/r`开始运行程序,`/c`继续执行直到下一个断点,`/s`进入函数内部单步调试,`/n`从当前行开始单步调试,而`/gdb`...
通过这些题目,读者可以复习和巩固Linux系统的基础知识,包括文件操作、进程管理、内存管理、GCC编译器的使用、GDB调试技巧以及C语言编程规范和逻辑判断等内容。这将有助于提高Linux软件工程师的技能水平和应对考试...
Android系统分四层,第一层由C语言实现,第二层由C/C++实现,第三层和第四层用JAVA实现。Android系统构架包括Linux内核、系统运行库、应用程序框架、应用程序等四个方面。 ARM(Advanced RISC Machines)是一种高...
第四章至第六章则关注硬件层面,讲解了构建嵌入式最小系统的方法,设计数字输入输出系统和定时计数器组件的技巧。这些基础知识是实现设备控制和时间同步的基础,例如GPIO的配置和中断处理,以及各种定时器的工作原理...