C语言strcat模拟实现

        strcat的头文件是<string.h>这个函数的含义是字符串追加,是在原字符串后面追加上一段字符串。举个例子

int main()
{
	char* p1 = "abcdef";
	char p2[20]="abcd";
	strcat(p2, p1);
	printf("%s", p2);
	return 0;
}

这段代码的意思就是在p2的后面追加上p1的内容,我们实际运行一下

 得到的结果和预想的一样。

下面就让我们来模拟实现一下这样一个函数:

首先为了使这个函数具备链接属性,我们让它返回类型为char*表示追加之后的字符串首元素地址,然后函数参数应该包括一个源和目的地,即是我们想要对其追加内容的字符串和追加的内容,这两个参数类型都应该是char*类型。并且源的内容我们不希望会发生改变,所以可以用const修饰。

char* my_strcat(char* des, const char* source)
{
    
}

接下来我们要想我们不能传进来空指针吧,如果目的地是空指针,那我们追加到哪里去呢,如果源是空指针,那我们追加什么呢,所以我们进入函数内部,先对其进行断言,断言记得添加头文件<assert.h>。

char* my_strcat(char* des, const char* source)
{
    assert(des!=NULL&&source!=NULL);
}

断言之后因为我们最后是要返回目的地地址,所以先创建一个临时变量来接受目的地以方便后期作为返回值返回。

char* my_strcat(char* des, const char* source)
{
    assert(des!=NULL&&source!=NULL);
    char* ret = des;
}

接下来我们需要找到目的地字符串的结束标志,也就是'\0',我们写一个循环来让des往后走到'\0'处停下来即可。

char* my_strcat(char* des, const char* source)
{
    assert(des!=NULL&&source!=NULL);
    char* ret = des;
    while(*des)
        des++;
}

这样des就是目的地'\0'处的地值了,接下来只需要一直把源的字符拷贝到目的地就可以了

char* my_strcat(char* des, const char* source)
{
    assert(des!=NULL&&source!=NULL);
    char* ret = des;
    while(*des)
        des++;
    while(*des++=*source++)
        ;
}

完成拷贝之后我们把目的地地址返回回去就可以完成了。

char* my_strcat(char* des, const char* source)
{
    assert(des!=NULL&&source!=NULL);
    char* ret = des;
    while(*des)
        des++;
    while(*des++=*source++)
        ;
    return ret;
}

我们可以测试一下

int main()
{
	char* p1 = "abcdef";
	char p2[20]="abcd";
	my_strcat(p2, p1);
	printf("%s", p2);
	return 0;
}

 达成目标。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值