zoukankan      html  css  js  c++  java
  • linux c驴杂记

      

    C语言标准库中包含了各种用于处理错误的函数和宏。
    1、assert( ) 宏
    #include<assert.h>
    void assert( int expression );
    可用于诊断程序bug。expression可以是任何要检测的东西:变量或任何表达式。如果expression为TRUE,则assert()不执行任何操作;否则在stderr上显示一条错误消息,并终止程序的执行。例:assert( x >= 0);为使assert( )宏发挥作用,编程程序必须采用调试模式。以后以发行模式编译程序的最后版本时,assert()将被禁用。
    assert( )采取的动作取决于另一个名为NDEBUG宏(表示“不调试”)。如果NDEBUG宏未被定义(默认情况),则assert( )将处于活动状态;否则assert( )将被关闭,因此不起作用。定义NDEBUG宏的代码如下: #define NDEBUG,则assert()不起作用!
    2、头文件errno.h
    头文件errno.h定义了几个宏,用于定义和记录运行错误。这些宏将结合函数perror( )一起使用。头文件errno.h定义了一个名为errno的外部int变量。如果执行时发生错误,C语言函数库中的很多函数都将一个值赋给该变量。
    头文件errno.h定义的符号错误常量
    名称 值 消息和含义
    E2BIG 1000 参数列表过长(超过128字节)
    EACCES 5 没有权限(如,试图写一个为只读的文件)
    EBADF 6 文件描述符无效
    EDOM 1002 数学参数超出范围(将一个不允许的值作为参数传递给数学函数)
    EEXIST 80 文件已经存在
    EMFILE 4 打开过多的文件
    ENOENT 2 没有这样的文件或目录
    ENOEXEC 1001 执行格式错误
    ENOMEM 8 内存不够(如没有足够内存执行exec()函数)
    ENOPATH 3 路径未找到
    ERANGE 1003 结果超出范围(如数学函数值过大)
    可以以两种方式来使用errno。有些函数通过其返回值来指出发生了错误。在这种情况下,可以通过检测errno的值来确定错误的性质,并采取相应的措施。如果无法知道是否发生了错误,可以检测errno。如果它不为0,则说明发生了错误,而errno的值指出了错误的性质。处理完错误后,一定要将errno的值重置为0。
    3、perror( )函数
    #include<stdio.h>
    void perror( const char *msg );
    perror( )函数是C语言中另一个错误处理工具,该函数在stderr上显示一条消息,指出库函数调用或系统调用期间,最后发生的一个错误。函数首先打印msg指向的一条可选的、用户定义的消息,然后是冒号以及实现定义的、描述最后发生的错误消息;如果没有错误,则显示no error。函数不会根据错误来采取某种措施。
    4. 传指针问题

    char *rn=NULL;
    char *rn1=NULL;
    char *a=local_exploit_vul(rn,"6e74c154-6496-11e4-a3c8-c3f68ace69a3");//里面有calloc 给rn,没定义
    char *a1=local_exploit_vul(rn1,"6e7411e4-a3c8-c3f68ace69a3");//里面有calloc
    printf("%s ",a );
    printf("%s ",a1 );
    free(a);
    free(a1);

    5.malloc calloc 

    用calloc多些

    6.fpoen system 

    fpopen交互多些



  • 相关阅读:
    威尔逊定理  知识点
    费马小定理及推论 知识点
    勾股定理和勾股数
    hdu6441 Find Integer (费马大定理)
    费马大定理
    莫队算法 [国家集训队]小Z的袜子
    R49 A-D D图有向有环图
    #505 1&2 A-C 后面未完成
    stack 的一些用法
    bzoj 2844 albus就是要第一个出场 异或和出现次数 线性基
  • 原文地址:https://www.cnblogs.com/qbmiller/p/4062398.html
Copyright © 2011-2022 走看看