目录
2.2目标空间必须足够大,能容纳下源字符串的内容,且目标空间必须可以修改
1.strcat的用法
strcat的函数原型的声明为
char*strcat(char* strDestination, const char* strSource);
其返回值为char*,需要传入两个参数
简要说明
使用strcat函数需要包含头文件<string.h>
strcat函数可以将一个字符串追加到另外一个字符串的后面
用法举例
#include<stdio.h>
#include<string.h>
int main()
{
char arr[20]="hello ";
strcat(arr,"world");
printf("%s\n",arr);
return 0;
}
上述代码即可将"world"追加到"hello "后面,运行结果如下图
打印的结果为hello world
2.strcat函数使用过程中分易错点
2.1追加的源字符串必须以'/0'结束
如下例代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[20] = "hello ";
char arr2[] = { 'w','o','r','l','d' };
strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
arr2中没有人为加入\0
其运行结果如下图
可以看出除了world以外为还打印出来一些乱码
这是因为strcat函数会把源字符串直到\0为止的所有字符都追加到arr1中
2.2目标空间必须足够大,能容纳下源字符串的内容,且目标空间必须可以修改
这个好理解如法目标空间不够大则无法将完整的字符串追加到目标字符串的后面
如果目标空间不可以修改(如被const所修饰)就无法将字符追加上去
2.3strcat函数能不能使字符串自己能不能给自己追加?
如下例代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[20] = "hello ";
strcat(arr1, arr1);
printf("%s\n", arr1);
return 0;
}
在vs2022中编译运行的结果如下
可知在vs2022中strcat函数是可以给自己追加的。
3.strcat的模拟实现
strcat的使用很方便,我们能不能自己实现一下呢?
3.1实现思路
1.首先对src传入进行const修饰并对dest和src进行断言进行保护
2.由于dest指针指向的地址会发生改变所有用ret保留dest的起始地址
3.找到dest所指向字符串的末尾的'\0'一方便追加
4.使用循环开始将src种都字符串追加到dest种
5.返回ret的地址
3.2实现代码
#include<stdio.h>
#include<assert.h>//使用断言所需的头文件
char* mystract(char* dest, const char* src)//由于src是所需要追加的字符串使用const防止对齐修改
{
assert(dest && src);//对dest和src进行断言,不能是空指针
char* ret = dest;
//1.找到目标空间的末尾\0
while (*dest != '\0')
{
dest++;
}
//将src的字符串拷贝到dest中
while (*dest++ = *src++)
{
;
}
return ret;//返回目标字符串
}
int main()
{
char arr1[20] = "Hello ";
char arr2[20] = "橘子真甜~";
mystract(arr1, arr2);//使用自己实现的函数将arr2追加到arr1中
printf("%s\n", arr1);//打印
return 0;
}
3.3运行结果
可以看出能够打印出所追加的字符串
4.思考总结
自己模拟实现的代码能不能给自己追加呢,读者可以思考并自己运行实现一下
今天的博客就到此结束了,谢谢大家~