出错处理
•
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操作系统下的编程技术。这个系列讲座的第二期是一个精心设计的教程,旨在为初学者提供一个全面且详细的指导,涵盖了大量的理论知识和实践案例...
《Linux环境C程序设计》是徐诚先生在清华大学出版社出版的第二版教材,该书深入浅出地介绍了在Linux操作系统下进行C语言编程的基础知识和高级技巧。此资源包含源码和PPT,为读者提供了丰富的实践材料和教学辅助资料...
《C语言学习资料》是一本全面介绍C语言的教程,适合初学者和有一定经验的开发者。C语言是一种高效、可移植且功能强大的编程语言,广泛应用于后端开发领域。本书内容涵盖C语言的基础知识,从语言起源、特点到实际应用...
《C-Primer-Plus(第6版)(中文版)1》是一本关于C语言编程的入门书籍,适合初学者了解和学习C语言的基础知识。书中涵盖了C语言的起源、特性和应用范围,以及如何使用C语言进行程序设计的全过程。 1. C语言的起源:...
《21天学通Linux C编程(第2版)》是一本旨在帮助初学者快速掌握Linux环境下C语言编程技能的教程。光盘内容包括了学习过程中至关重要的辅助材料,如电子教案(PPT)、习题参考答案以及源代码,这些资料对于深入理解...
《Linux操作系统(下)》复习题涉及到的知识点广泛,涵盖Linux系统的使用、调试工具、编程编译、文件管理、系统命令、权限、环境变量、进程管理、网络协议等多个方面。以下是对这些知识点的详细解释: 1. `gdb` 是GNU...
《Linux高级程序设计》第三版,由杨宗德教授撰写,是一本深入探讨Linux系统下程序开发的经典著作。这本书不仅涵盖了基本的编程概念,还详细讲解了如何在Linux环境中进行高效的程序设计。杨宗德教授以其丰富的教学和...
通过这些题目,读者可以复习和巩固Linux系统的基础知识,包括文件操作、进程管理、内存管理、GCC编译器的使用、GDB调试技巧以及C语言编程规范和逻辑判断等内容。这将有助于提高Linux软件工程师的技能水平和应对考试...
Android系统分四层,第一层由C语言实现,第二层由C/C++实现,第三层和第四层用JAVA实现。Android系统构架包括Linux内核、系统运行库、应用程序框架、应用程序等四个方面。 ARM(Advanced RISC Machines)是一种高...
第四章至第六章则关注硬件层面,讲解了构建嵌入式最小系统的方法,设计数字输入输出系统和定时计数器组件的技巧。这些基础知识是实现设备控制和时间同步的基础,例如GPIO的配置和中断处理,以及各种定时器的工作原理...
4. **汇编语言程序开发**:包括编辑、汇编、链接和运行调试四个步骤。 5. **ARM处理器**:ARM7TDMI处理器有两种状态(ARM和Thumb)和七种模式,每种模式都有其特定的用途,如用户模式、中断模式和管理模式。 6. **...
本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...
C语言编程能力是必需的,包括编写、编译和调试程序。考生需要将理论知识应用于实际操作中,解决相关问题。 7. **考试形式**:考试分为上机操作和笔试两部分,总计180分钟,其中上机操作60分钟,笔试120分钟,全面...