assert:函数原型是:void assert( int expression );其作用是现计算表达式 expression ,如果其值为假(即为0),那么它先 stderr 打印一条出信息,然后通过调用 abort 来终止程序运行。使用assert 的缺点是,频繁的调用会影响程序的性能,增加额外的开销。
strcat:函数原型是char *strcat(char *dest, const char *src);使用方src所指向的字符串(包括'\0')复制到dest所指向的字符串后面(删除*dest原来末尾的'\0')。要保证*dest足够长,以容纳被复制进*src中原有的字符不变,返回指向dest的指针。
assert--代码展示
#include <stdio.h>
#include <assert.h>
int main()
{
char* mystrcpy(char *a,char *b)
{
assert(a != NULL && b != NULL);//调用断言
char *result = a;//保存a的地址
while(*b != '\0')
{
*a++ = *b++;//b的值给a并开始偏移
}
*a = '\0';//b=‘\0’后a=‘\0’
return result;
}
char a[128] = {'\0'};
char *b = "hello word";
char *c = NULL;//验证断言
mystrcpy(a,b);//不会断言正常输出
puts(a);
mystrcpy(c,b);//断言后会终止程序
puts(c);
return 0;
}
strcat--代码展示
#include <stdio.h>
#include <assert.h>
#include <string.h>
char* mystrcat(char *dest,char *src)
{
assert(dest != NULL && src != NULL);
char *result = dest;
while(*dest != '\0')
{
dest++;//不等于'\0'发生偏移
}
while(*src != '\0')
{
*dest++ = *src++;
}
*dest = '\0';
return result;
}
int main()
{
char a[128] = "hello ";
char *b = "world";
char *c;
c = mystrcat(a,b);//将b拼接给a
puts(c);
return 0;
}