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\n",a );
printf("%s\n",a1 );
free(a);
free(a1);

5.malloc calloc

用calloc多些

6.fpoen system

fpopen交互多些



linux c驴杂记的更多相关文章

  1. Linux Bash命令杂记(tr col join paste expand)

    Linux Bash命令杂记(tr col join paste expand) tr命令 tr命令可以将输入的数据中的某些字符做替换或者是作删除 tr [-ds] STR d: 删除输入数据的中的S ...

  2. Linux Bash命令杂记(cut sort uniq wc tee)

    Linux Bash命令杂记(cut sort uniq wc tee) 数据流重定向 标准输入(stdin):代码为0,使用<或<<: 标准输出(stdout):代码为1,使用&g ...

  3. linux驴杂记

    1. 命令行 vim下 的Ctrl + S ,ctrl +Q: 这个功能可以用于长时间编译的时候随时把屏幕输出停住,但是编译仍然会继续,这样就不会影响到编译时间了. S:是锁屏  q:是开屏 2. S ...

  4. Linux 常用命令杂记

    移动光标:h:向左移动j:向下移动k:向上移动l:向上移动 与window 光标移动键功能一致. 常用命令行:shift + ^ 行首shift + $ 行尾ctrl + v 可视模式 , 选择一个范 ...

  5. Linux基础命令杂记

    今天又一次搞Linux生产环境搭建.这是种步骤很多,很繁琐而且又不得不做的事情.虽然做过很多次,但还是有很多步骤.命令不记得,每一次到处找资料很麻烦,于是将一些步骤记下,以便查找. 登录远程MySQL ...

  6. Linux内核知识杂记

    1.内核调试手段 1.printk打印内核状态 2.产生opps时使用GDB查看调用栈 2.内核空间和用户空间区别,通信方式有哪些? Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,L ...

  7. oracle18c linux x86-64 install 杂记

    132 yum install libstdc++-devel 133 yum install compat-libstdc++-33 135 yum install compat-libcap1 1 ...

  8. linux 生产环境搭建

    Linux基础命令杂记   今天又一次搞Linux生产环境搭建.这是种步骤很多,很繁琐而且又不得不做的事情.虽然做过很多次,但还是有很多步骤.命令不记得,每一次到处找资料很麻烦,于是将一些步骤记下,以 ...

  9. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

随机推荐

  1. FAAS -- Serverless

    FAAS概念,无服务器运算,功能即服务,function-as-a-service 初创企业-大型企业.民间组织-政府机构 ===>>>> 上云 云计算第三代技术 -- Ser ...

  2. 一张图看懂sql的各种join

    下图展示了 LEFT JOIN.RIGHT JOIN.INNER JOIN.OUTER JOIN 相关的 7 种用法.

  3. 20210105 - python自动化办公简介

    新的一年开始了, 计划每周至少更新三篇博客. 人生苦短,如果不做改变,人生很快会过去!2021年寻求改变,加油! python自动化办公: 1.相关工具与环境的安装概要: 需要用到python(一种开 ...

  4. idea生成UML

    原文链接http://zhhll.icu/2020/12/18/idea/%E7%94%9F%E6%88%90UML/ 使用idea直接生成UML类图 然后点击所要生成的类即可生成 由于本身的博客百度 ...

  5. linux安装ftp步骤

    1,查看是否安装了FTP:rpm -qa |grep vsftpd 2,如果没有安装,可以使用如下命令直接安装 yum -y install vsftpd 默认安装目录:/etc/vsftpd 3,添 ...

  6. (二)数据源处理6-excel数据转换实战(下)

    将结果的所有数据整理如下: {'api_case_01': [{'测试用例编号': 'api_case_01', '测试用例名称': '获取access_token接口测试', '用例执行': '是' ...

  7. rm: cannot remove `/tmp/localhost-mysql_cacti_stats.txt': Operation not permitted

    [root@DBslave tmp]# chown zabbix.zabbix /tmp/localhost-mysql_cacti_stats.txt

  8. DOI技术扫盲一

    DOI:  desktop office intergration   桌面办公软件集成简单的将,就是我们在Windows桌面中打开的办公软件(如:word,excel,pdf等等)可以在SAP系统进 ...

  9. 面向对象的延伸与Java内部定义类的应用

    识别类 传统的过程化程序设计,必须从顶部的main函数开始编写程序,在面向对象程序设计时没有所谓的"顶部".首先从设计类开始,然后再往每个类中添加方法. 识别类的规则是在分析问题的 ...

  10. 前端面试之HTTP状态码!

    前端面试之HTTP协议的东西! 一次HTTP请求的流程! HTTP 状态码 成功响应(200–299) 状态码 含义 200 请求成功 201 该请求已成功,并因此创建了一个新的资源.这通常是在POS ...