在之前回文串中使用了assert
#include<stdio.h>
#include<string.h>
#include<assert.h>
char * my_strlwr(char * str) //定义一个my_strlwr函数
{
assert(str); //str的非空性
char *ret = str; //定义一个ret保存最初的str
while(*str != '\0') //判断字符串是否结束
{
if((*str >= 'A')&&(*str <= 'Z'))//判断当前啊字符是否是 大写字母
{
*str = *str +32; //根据ascii码表将其转化为小写字母
str++;
}
else
str++;
}
return ret; //返回该字符串数组的首地址
此次解释一下assert的使用方法及效果
assert.h头文件支持的断言库是一个用于辅助调试程序的小型库。它由assert()宏组成,接受个整型表达式作为参数。如果表达式求值为假(非零),assert()宏就在标准错误流(stderr)中写入一条错误信息,并调用abort()函数终止程序(abort()函数的原型在stdlib.h头文件中). assert()宏是为了标识出程序中某些条件为真的关键位置,如果其中的一个具体条件为假,就用assert()语句终止程序。通常,assert()的参数是一个条件表达式或逻辑表达式。如果assert()中止了程序,它首先会显示失败的测试,包含测试的文件名和行号。
简单来说就是计算表达式expression 若其值为假(0)则打印一行报错信息
类似于if else 的作用
if(expression){继续执行}else{报错}
同时也有缺点 频繁地调用会极大影响程序的性能 增加额外的开销
可以在调试结束后在包含 #include<assert.h>的语句前插入#define NDEBUG来禁止assert调用
使用情景:函数开始处检验输入参数的合法性
eg assert(n>=0)//如果输入的n值小于零 则报错并且结束程序的运行
注意:1>每个assert只用于检验一个条件 同时及检验多个条件时 如果断言失败 则无法直观的判断哪一个条件失败
2>不能使用环境改变语句 因为assert只在DEBUG中生效
eg assert(i++<100) 如果出错 在执行前如果i=100 i++就不会被执行
最后附上assert报错样例
11.5