跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 工具系统 > 运营工具 > C语言中strcat()函数的使用详解

C语言中strcat()函数的使用详解

时间:2024-04-13 15:00:30 来源:网络cs 作者:璐璐 栏目:运营工具 阅读:

标签: 使用  函数  语言 

1、strcat函数的各个参数介绍

char* strcat(char* destination,const char* source)

①函数名为strcat

②返回值类型为char*,是目标空间的起始地址

③函数的参数,第一个是目标空间的起始地址,第二个是源字符串的起始地址。

2、strcat函数的作用

strcat函数是在一个字符串后面追加一个字符串,也就是将两个字符串拼接起来。

3、strcat函数的细节分析

①strcat会从目标空间字符串的第一个'\0'处开始追加字符串,且追加字符串时会将第一个'0'给覆盖掉。

②目标空间必须足够大,且可以进行修改。

③目标空间必须得有'\0'

④源字符串中必须也得有'\0',追加时'\0'也被追加过去。

#include<stdio.h>#include<stdio.h>int main(){char ch1[20] = "Hello \0*******";char ch2[] = "World!";strcat(ch1,ch2);return 0;}

这是目标空间的第一个'\0'的位置,追加的字符串将从这个位置开始追加。

第一个箭头的指向证明了,strcat函数是从第一个'\0'的位置开始追加的,第二个箭头证明了,源字符串的'\0'也被追加了过去,那个位置原本是'*',可以看一下上一个图。

4、strcat函数的模拟实现

char* my_strcat(char* des, const char* sou){    asset(des && sou);//这个要引头文件include<assert.h>,作用是检查这两个指针是不是空指针char* p = des;while (*des){des++;}while (*des++ = *sou++);return p;}

这个函数的思路就是,先找到目标空间中字符串的'\0',然后将源字符串在'\0'处进行拷贝。

★模拟实现的扩展,虽然这个函数的作用是在一个字符串后追加另一个字符串,但是VS中给出的strcat函数可以在字符串后追加自己,而我们前面模拟实现的这个函数是做不到的,分析如下图:

通过图,我们发现,这会一直陷入循环,没有结束的时候。所以,我们可以对我们的代码稍加优化,使我们的模拟实现具备这个功能,但是,虽然具有这个功能,我们尽量不要使用,因为strcat这个函数的作用是是在一个字符串后追加另一个字符串。VS具有这个功能,我们也可以实现这个功能,但是别的编译器不一定具备,所以为了可移植性更好,不要随便使用。

改进代码如下:

<方法一>统计长度

char* my_strcat1(char* des, const char* sou){char* ret = des;int len = strlen(sou);while (*des){des++;}for (int i = 0; i < len; i++,des++,sou++){*des = *sou;}*des = '\0';return ret;}

先让指向目标空间的指针找到字符串的'\0',然后求出源字符串的长度,然后根据这个长度用for循环拷贝源字符串到目标空间字符串的末尾。

<方法二>偏移调整

char* my_strcat2(char* des, const char* sou){char* ret = des;while (*des++);char* midp = des-1;while (*des++ = *sou++);while (*(midp+1)){*midp = *(midp + 1);midp++;}*midp = *(midp + 1);return ret;}

思路是,我们将源字符串追加到目标空间字符串的'\0'之后,追加完成之后,我们再将追加的字符串向前移动一个char类型,将'\0'给覆盖。

<方法三>先后放置

char* my_strcat3(char* des, const char* sou){char* dret = des;char* sret = sou;while (*des++);char* midp = des - 1;sou++;while (*des++ = *sou++);*midp = *sret;return dret;}

思路是,我们先将源字符串的第二个及以后的字符串追加到目标空间字符串的'\0'之后,等追加完成,我们再用源字符串的第一个字符去覆盖'\0'

本文链接:https://www.kjpai.cn/news/2024-04-13/158115.html,文章来源:网络cs,作者:璐璐,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇:Labelme 安装以及使用

下一篇:返回列表

文章评论