strcat函数的使用和模拟实现

6dc22763e6ef45d2856fe39df0638ec3.png

目录

1.头文件

 2.函数功能​编辑

3.注意事项:

4.strcat函数模拟实现:


方源一把抓住VS2022,催动春秋产的气息,顷刻炼化!


1.头文件

strcat函数的使用,需要头文件

#include<string.h>

 2.函数功能27d5025d7e36408fb153a3a6f7496956.png

strcat函数接收两个地址参数,这里以图片讲解,第一个地址名为destination,第二个地址名为source

我们知道,字符串只要给出其中一个字符的地址,那系统就会顺藤摸瓜出这个地址之后所有的字符,直到'\0'

而strcat函数可以将source地址所指向的字符串从destination地址所指向的字符串的 '\0' 开始,一个一个的将它(source)的字符复制上去,直到'\0'也复制上去后,结束复制

示例如下:

55f5fbdd20ab4b66a906e3525c48cf39.png

由此可见,strcat可以将arr2数组内的字符串,从arr1数组内字符串'\0'的位置开始,一个一个将(arr2的内容)复制粘贴到arr1上去,我们了解到,源字符串(arr2)在遇到'\0'时会将'\0'复制上去后停止复制,那么到底复制'\0'上去了吗?

我们再测试一下:

590ea7022ca94c4eb9926396067e6037.png

我们看到,从arr1的'\0'开始复制,将a,b,c都复制了上去,如果'\0'也复制上去,那就会有一个x被替换成'\0',打印出4个x,如果'\0'没有复制上去,就会打印5个x


3.注意事项:

strcat与strcpy的注意事项相似

1.源字符串必须以'\0'结束

2.目标字符串必须有'\0',否则不知道从哪里复制

3.目标空间必须足够大,能容纳下源字符串

4.目标空间必须可修改

5.源字符串会将'\0'也复制上去


4.strcat函数模拟实现:

如果想要实现strcat模拟实现,我们就要找到目标字符串的'\0',也要找到源字符串的'\0',最重要的是将'\0'也复制上去(上节有讲如何'\0'复制上去,这里用相同的方法)

那么,代码如下:

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
void my_strcat(char* arr1, char* arr2) {
	while (*arr1 != '\0') {
		arr1++;
		//这样一直增加地址,直到找到'\0'
	}
	while (*arr1++ = *arr2++) {
		// 后置++的优先级高于解引用操作符
		// 解引用操作符的优先级 高于 赋值操作符
		/* 后置++,先使用后++
		*  *arr1 = *arr2
		* arr2++
		* arr1++
		* 当*arr2 = '\0'时
		* 接着会进行*arr1 = *arr2
		* 之后再++
		* 所以'\0'也复制上去了
		*/
	}
}
int main()
{
	char arr1[20] = { "qwer" };
	char arr2[] = { "abcdef" };
	my_strcat(arr1, arr2);
	int sz = sizeof(arr1) / sizeof(arr1[0]);
	for (int i = 0; i < sz; i++) {
		printf("%c ", arr1[i]);
	}
}

感谢阅读,详解在代码里,不懂可以在评论区提问或者私信

8fdd48caf53e46a897fd8a5554dbb454.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值