字符函数strcat的使用以及模拟实现

一. 介绍函数

打开strcat - C++ Reference 网址,在里面查看函数的相关介绍

翻译过来,strcat函数其实是对字符串进行数据追加,在目标空间指针所指向的'\0'处,将需要追加的字符串赋值到此处.

函数所接受的参数 : 

        参数1(char* dest) : 指向目标空间的字符指针.

        参数2(const char* src) : 指向源字符串的字符指针.

函数的返回类型 : 

        返回类型(char*) : 返回的是字符指针.

二. 函数的用法

了解到函数接受的参数是指针,也就是地址,所以传参就需要传字符数组的地址.

        代码如下 : 

#include<stdio.h>
#include<string.h>

int main()
{
	char ar1[10] = "abc";
	char ar2[] = "def";
	strcat(ar1, ar2);
	printf("%s", ar1);
	return 0;

}

运行结果 : 

可以看到ar2中的数据成功的追加到了ar1后.

三. 模拟实现

        学会了如何使用strcat,接下来尝试模拟实现.

首先,因为是在目标空间的末尾处进行追加,所以需要让指针遍历到'\0'处.

代码如下 :

char* my_strcat(char* dest, const char* src)
{
	while (*dest != '\0')
	{
		dest++;
	}

通过使用while循环来判断dest解引用后的值是否为'\0' , 若不是则dest++, 直到*dest == '\0' , 再结束循环.

接着, 找到了目标空间的末尾,就要进行拷贝字符

代码如下 :

	while (*dest++ = *src++)
	{
		;
	}

同样, 通过while循环进行赋值, src解引用后赋值给dest指向的空间, 当src解引用后为 '\0' 赋值给dest, 则循环体的判断条件为0 ,循环结束 . 在while循环体中,可以直接用分号,允许不写语句.但要保证能够结束循环.

最后, 由于函数的返回值是char*类型, 而dest经过遍历,不再指向起始地址,所以在遍历之前,保存到临时变量中.

完整代码如下 : 

#include<stdio.h>
#include<assert.h>

char* my_strcat(char* dest, const char* src)
{

	char* ret = dest;                    //将desr保存到临时变量中
	assert(dest && src);                 //断言,保证dest和src不为空指针

	while (*dest != '\0')                //循环遍历dest指向末尾
	{
		dest++;
	}

	while (*dest++ = *src++)             //循环赋值
	{
		;
	}
	return ret;                          //返回临时保存的变量

}

int main()
{
	char ar1[10] = "abc";
	char ar2[] = "xyt";
	my_strcat(ar1, ar2);
	printf("%s", ar1);
	return 0;
}

四. 注意事项 

1. 目标空间必须足够大 , 还需要可以修改 , 避免出现数组越界情况 . 

2. 目标空间中必须要有'\0', 保证能找到目标空间的末尾.

3. 源字符串中也必须要有'\0', 在拷贝是会将源字符串中的'\0'一同拷贝. 

4. strcat函数不能自己追加自己, 由于目标空间不断地追加自己, '\0' 会被覆盖,导致无法遇到 '\0' 

会导致死循环.

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值