前言:在C/C++的学习过程当中一定一定要多刷题,牛客网作为国内内容超级丰富的IT题库,尤其是它的C、C++,有从入门到大厂真题,而且大部分的考试题目也是从中抽取,还有很多面经,推荐大家去牛客网进行刷题练习,点击链接:牛客网刷题入口
前言
strcat函数又称字符串追加或字符串连接函数,函数的功能就是在一个字符串后面追加上另外一个字符串。
一、认识并使用strcat函数
1.库函数中strcat函数的声明->头文件string.h
char* strcat(char* Destination, const char* source);
2.认识strcat函数
strcat函数最后返回的是目的地地址,所以返回类型是char*由于我们只是在目的地字符串后追加源头字符串,所以源头字符串不会被修改,source用const修饰,比较安全。strcat函数将源头字符串的所有字符,包括’\0’,都连接到目的地字符串的后面,这样连接后的字符串才有字符串的结束标志’\0’,程序才不会崩溃。
3.使用
#include<string.h>
#include<stdio.h>
int main()
{
char arr1[20] = "hello ";//保证目的空间足够大
char arr2[] = "world";
printf("%s\n", strcat(arr1, arr2));
return 0;
}
4.注意
(1)源字符串和目的字符串都必须以’\0’结束
(2)目的地空间必须足够大,足够放下追加后字符串
(3)目标空间必须可修改
(4)strcat函数不能做到自己给自己追加,因为一个字符数组只有一个空间,你要在一个空间进行自己的字符串追加,找到’\0’后,将’a’赋给’\0’,那此字符串不是就没有了字符串结束的标志了吗?代码会进入死循环的
二、模拟实现strcat函数
1.明确思路
(1)指针断言-作安全性优化,保证dest,src均不为空指针
(2)保留目的字符串的首元素地址,因为之后要返回的是dest的首地址,追加的过程中指针dest的位置会被改动(往后移)
(3)找到目的地字符串的’\0’
(4)从dest的’\0’位置开始依次追加src字符串
首先strcat函数会找到目的地字符串的’\0’,然后将源头字符串的第一个字符,赋给目的地字符串的’\0’,然后继续依次赋值。
(5)返回最开始保留的目的地字符串的首元素地址
2.代码实现
代码如下(示例):
#include<stdio.h>
#include<assert.h>//assert断言的头文件
char* my_strcat(char* dest, char* src)
{
//1.断言
assert(dest && src);
//2.保留目的地字符串首元素地址
char* ret = dest;
//3.找到目的地字符串的'\0'
while (*dest)
{
dest++;
}
//4.开始依次追加源头字符串
while (*dest++ = *src++)
{
;
}
//返回首元素地址
return ret;
}
int main()
{
//字符数组存储字符串
char arr1[30] = "hello";
char arr2[] = "world";
//调用自己实现的strcat函数
my_strcat(arr1, arr2);//将俩字符串的首元素地址传过去
printf("%s", arr1);//数组名就是首元素地址
return 0;
}