【C语言assert关键字】

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的作用,并合理地搭配其他语句和特性使用,以便更好地保证程序的正确性、可靠性以及严谨性。

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值