#pragma once
#include<stdio.h>
#include <assert.h>
char *strcpy(char *dest,const char *src)
{
char *d = dest;
assert((dest != NULL&& src != NULL));
// if(dest == NULL|| src == NULL)
// {
// printf("error");
// return d;
// }
while( (*dest++ = *src++) != '\0')
;
return d;
}
int main()
{
char s[] = "123456789";
char d[] = "123";
// printf("%s\n",s);
// printf("%s\n",d);
// strcpy(d,s);
strcpy(d,NULL);
printf("%s\n",s);
printf("%s\n",d);
return 0;
}
注意:assert是宏,而不是函数。在C的assert.h头文件中。
assert的作用是先计算表达式expr,如果其值为假(即为0),那么它会打印出来assert的内容和FILE, LINE, __ASSERT_FUNCTION,然后执行abort()函数使kernel杀掉自己并coredump(是否生成coredump文件,取决于系统配置);否则,assert()无任何作用。宏assert()一般用于确认程序的正常操作,其中表达式构造无错时才为真值。完成调试后,不必从源代码中删除assert()语句,因为宏NDEBUG有定义时,宏assert()的定义为空
如下图: