C语言之assert
前言:
在编写程序过程中,尤其是调试代码时,往往需要一个提醒代码漏洞/Bug的小助手,以便于程序员及时修改和完善代码。那么assert关键字就可以成为这个小助手。
1、什么是assert?
概念: assert 是一种断言,它是C语言、C++和Java等编程语言常用的关键字。
作用: 在编写程序时,为了保证程序的正确性、可靠性和安全性,常用于在程序执行过程中进行判断某个条件是否成立,如果条件不成立,程序会立即停止执行。
2、assert的用法
语法:
assert(condition);
condition:要判断的条件
说明:
a、如果condition判断结果为false,则程序就会停止执行。
b、当程序停止执行时,assert就会断言失败,并输出一条程序的错误信息到控制台或日志文件中。
c、assert关键字常常用于调试程序阶段,可以用来帮助程序员在程序出现异常或错误时,快速定位问题所在,以便于检查和就修改完善。
d、而在程序正常部署后,assert一般就会被自动关闭。
2.1、assert例程1
/*例程1*/
#include <stdio.h>
#include <assert.h>
#include <string.h>
//size_t --- unsigned int
size_t My_strlen(const char* str)//参数传数组首地址
{
assert("str != NULL");//注意:这里我把断言取消了,要用时把双引号去掉即可
//断言,判断是否传的空地址,及时报错纠正
int count = 0;//计数
//是假就不执行while循环
//是真则执行,函数体
//不断判断后加加(后置++,先用后加),数组元素是否为字符串结束标志位'\0'
while (*str != '\0')
{
str++;
count++;
}
return count;
}
int main()
{
char arr[] = "hello bit!!!";
int len = My_strlen(arr);
printf("%d\n", len);//12
return 0;
}
如图所示:
小结:
a、断言需要引用头文件,<assert.h>
b、断言,作用是指出代码报错的位置/方便查找原因
3、assert的搭配
assert关键字一般和其他编程特性搭配使用,以下是几个常见的
搭配:
a、与if语句搭配使用:
assert和if一起使用可以让我们更好地控制程序执行流程。
通过if语句来判断程序的状态,再使用assert来断言某些关键条件是 否仍然成立。
b、与try-catch语句搭配使用 在C++和Java等面向对象的语言中
assert通常和异常处理语句try-catch一起使用。
当程序抛出异常时,assert可以将程序停止 执行并输出错误信息,以便程序员快速发现问题并进行修复。
c、与Log输出搭配使用 除了在控制台输出错误信息,assert还可以将错误信息输出到日 志文件中,以便程序员更加方便地进行分析调试。
3.1、assert例程2
/*例程2*/
#include <stdio.h>
#include <assert.h>
//断言需要引用头文件,<assert.h>
//const ---- 方便检查strcpy参数是否写反了
//标准strcpy函数
char* my_strcpy(char* dest, const char* src)
{
assert(src != NULL);//判断传过来的参数是否为空指针
assert(dest != NULL);
char* ret = dest;
while (*dest++ = *src++)//这里判断的结果是逻辑真假,所以既实现了拷贝了\0,也同时实现循环条件的跳出
{
;//hello的拷贝
}
return ret;//返回目标空间的起始地址
}
int main()
{
char arr1[20] = "xxxxxxxxx";
char arr2[] = "hello";
my_strcpy(arr1, arr2);
printf("%s\n", my_strcpy(arr1, arr2));//链式访问
return 0;
}
如图所示:
4、结束语
总体来说;
assert是一个非常有用的关键字,能够帮助程序员在编写程序时更快地发现问题并进行修复,
从而提高程序的安全性和可靠性。
因此,编写程序时应该充分发挥assert的作用,并合理地搭配其他语句和特性使用,以便更好地保证程序的正确性、可靠性以及严谨性。