目录
1.头文件
2.函数功能编辑
3.注意事项:
4.strcat函数模拟实现:
方源一把抓住VS2022,催动春秋产的气息,顷刻炼化!
1.头文件
strcat函数的使用,需要头文件
#include<string.h>
2.函数功能
strcat函数接收两个地址参数,这里以图片讲解,第一个地址名为destination,第二个地址名为source
我们知道,字符串只要给出其中一个字符的地址,那系统就会顺藤摸瓜出这个地址之后所有的字符,直到'\0'
而strcat函数可以将source地址所指向的字符串从destination地址所指向的字符串的 '\0' 开始,一个一个的将它(source)的字符复制上去,直到'\0'也复制上去后,结束复制
示例如下:
由此可见,strcat可以将arr2数组内的字符串,从arr1数组内字符串'\0'的位置开始,一个一个将(arr2的内容)复制粘贴到arr1上去,我们了解到,源字符串(arr2)在遇到'\0'时会将'\0'复制上去后停止复制,那么到底复制'\0'上去了吗?
我们再测试一下:
我们看到,从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]);
}
}
感谢阅读,详解在代码里,不懂可以在评论区提问或者私信