一 基本语法
1. 作用
- 调试工具:用于运行时检查条件是否成立,若失败则终止程序并报错(文件名、行号、条件)。
2. 语法
#include <assert.h>
assert(condition); // condition为假时触发断言
3. 行为
- 条件为真:程序继续执行。
- 条件为假:
- 输出错误信息(
Assertion failed: condition, file, line
)。 - 调用
abort()
终止程序。
- 输出错误信息(
4. 示例
int x = -1;
assert(x >= 0); // 触发断言,程序终止
5. 关键注意
- 仅用于调试:通过
#define NDEBUG
可禁用断言(发布时使用)。 - 不替代错误处理:避免检查用户输入或外部数据,仅验证程序内部逻辑。
- 无副作用:断言条件中避免修改变量(如
assert(x++)
)。
6. 适用场景
- 检查“不应出现”的逻辑错误(如数组越界、空指针等)。
一句话总结:assert
是开发阶段的“代码自检工具”,帮助快速定位问题,但需谨慎使用。
二 实践
- 代码示例:
#include <stdio.h>
#include <string.h>
#include <assert.h>//依据"strcpy"函数原型封装一个函数用于实现其功能
char *MyStrcpy(char *dest,char *string)
{ //采用assert函数进行正式操作前的安全性检查assert(dest!=NULL&&string!=NULL);//函数的主体char *back=dest; //对目标指针进行保存while(*string!='\0'){*dest=*string;dest++;string++;}*dest='\0';return back;
}int main()
{char str[128]={'\0'};char *p="Hello Word!";char *p1=NULL;MyStrcpy(str,p1); //我们将会分别采用指针p与指针p1进行测试printf("%s",str);return 0;
}
- 成果展示: