字符串中的assert和strcat

assert:函数原型是:void assert( int expression );其作用是现计算表达式 expression ,如果其值为(即为0),那么它先 stderr 打印一条出信息,然后通过调用 abort 来终止程序运行。使用assert 的缺点是,频繁的调用会影响程序的性能,增加额外的开销。(需要包含头文件#include assert.h)

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;
}

10700442ebe74aedb451877f9f5a723a.png


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;
}

5e5c84252d184aca8b77f52a5ea46eb9.png

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值