`
8366
  • 浏览: 802268 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

全面复习linux C语言系列--第四讲--程序调试

阅读更多

 

出错处理

 

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编程系列讲座第二期的所有资料

    在本资源"AKA Linux编程系列讲座第二期的所有资料"中,您将深入学习Linux操作系统下的编程技术。这个系列讲座的第二期是一个精心设计的教程,旨在为初学者提供一个全面且详细的指导,涵盖了大量的理论知识和实践案例...

    Linux 环境c程序设计源码+ppt(第二版)

    《Linux环境C程序设计》是徐诚先生在清华大学出版社出版的第二版教材,该书深入浅出地介绍了在Linux操作系统下进行C语言编程的基础知识和高级技巧。此资源包含源码和PPT,为读者提供了丰富的实践材料和教学辅助资料...

    C语言学习资料+++++

    《C语言学习资料》是一本全面介绍C语言的教程,适合初学者和有一定经验的开发者。C语言是一种高效、可移植且功能强大的编程语言,广泛应用于后端开发领域。本书内容涵盖C语言的基础知识,从语言起源、特点到实际应用...

    C-Primer-Plus(第6版)(中文版)1

    《C-Primer-Plus(第6版)(中文版)1》是一本关于C语言编程的入门书籍,适合初学者了解和学习C语言的基础知识。书中涵盖了C语言的起源、特性和应用范围,以及如何使用C语言进行程序设计的全过程。 1. C语言的起源:...

    21天学通Linux C编程(第2版)光盘内容

    《21天学通Linux C编程(第2版)》是一本旨在帮助初学者快速掌握Linux环境下C语言编程技能的教程。光盘内容包括了学习过程中至关重要的辅助材料,如电子教案(PPT)、习题参考答案以及源代码,这些资料对于深入理解...

    《Linux操作系统(下)》复习题参考.pdf

    《Linux操作系统(下)》复习题涉及到的知识点广泛,涵盖Linux系统的使用、调试工具、编程编译、文件管理、系统命令、权限、环境变量、进程管理、网络协议等多个方面。以下是对这些知识点的详细解释: 1. `gdb` 是GNU...

    Linux高级程序设计第三版杨宗德(源码+ppt)

    《Linux高级程序设计》第三版,由杨宗德教授撰写,是一本深入探讨Linux系统下程序开发的经典著作。这本书不仅涵盖了基本的编程概念,还详细讲解了如何在Linux环境中进行高效的程序设计。杨宗德教授以其丰富的教学和...

    Linux软件工程师模拟试卷与解析.pdf

    通过这些题目,读者可以复习和巩固Linux系统的基础知识,包括文件操作、进程管理、内存管理、GCC编译器的使用、GDB调试技巧以及C语言编程规范和逻辑判断等内容。这将有助于提高Linux软件工程师的技能水平和应对考试...

    嵌入式系统复习重点

    Android系统分四层,第一层由C语言实现,第二层由C/C++实现,第三层和第四层用JAVA实现。Android系统构架包括Linux内核、系统运行库、应用程序框架、应用程序等四个方面。 ARM(Advanced RISC Machines)是一种高...

    《嵌入式系统原理及应用》复习手册完整版.docx

    第四章至第六章则关注硬件层面,讲解了构建嵌入式最小系统的方法,设计数字输入输出系统和定时计数器组件的技巧。这些基础知识是实现设备控制和时间同步的基础,例如GPIO的配置和中断处理,以及各种定时器的工作原理...

    嵌入式考试复习重点.pdf

    4. **汇编语言程序开发**:包括编辑、汇编、链接和运行调试四个步骤。 5. **ARM处理器**:ARM7TDMI处理器有两种状态(ARM和Thumb)和七种模式,每种模式都有其特定的用途,如用户模式、中断模式和管理模式。 6. **...

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

    计算机三级考纲范围

    C语言编程能力是必需的,包括编写、编译和调试程序。考生需要将理论知识应用于实际操作中,解决相关问题。 7. **考试形式**:考试分为上机操作和笔试两部分,总计180分钟,其中上机操作60分钟,笔试120分钟,全面...

Global site tag (gtag.js) - Google Analytics