《strcat() 与 strncat() 的区别》全网干货最细

💝个人主页:小光死嗑C++😎
😃本人介绍:一名机械生非要找死学计算机,c++爱好者,正在c++道路上探索,愿意拿出一百二十的精力去与C++死磕到底!
😃文章难易程度:本人的文章没有貂蝉那么美,没有吕布那么强,通俗点说,小光的文章并不像那些大牛一样那么神奇,没有那么高深的算法,只是对自己所掌握的内容进行总结、梳理,最后一步一步细细细的写出来。所以不管是入门的小白,还是要复习牛逼的大佬,都是可以非常容易理解的希望各位不要嫌我啰嗦!
😆
结尾:最后说一点,小光的文章可能会有点不一样,只为了主打你在阅读文字繁多的资料时也可以让你开开心心的浏览

🚂1.strcat

前面我们讲了,如何将一个字符串拷贝到背标空间里面去,那么今天就介绍一下如何将两个字符串拼接成一个字符串,话不多说,我们直接发车!!!

干干干!!! 🧐🧐🧐

函数必备网站:https://legacy.cplusplus.com/

先看函数文件:
在这里插入图片描述

在这里插入图片描述

函数头文件:include <string.h>

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

1、char * 表示最后返回的是一个指针(地址)

2 、char * destination表示的是接收一个目标空间的首地址

3、char * source表示的是接收源空间的首地址

首先实现一下函数功能让大家开开眼界🤣🤣🤣!!!

在这里插入图片描述

看!Love You,

下面请看关于这个函数的讲解:

讲解一:

在这里插入图片描述

当我们真正拼接的时候,他是从哪开始拼接的,是从目标空间的‘\0’处开始拼接的么???来调试一下

在这里插入图片描述

在这里插入图片描述

由此可以得出:

🚦干货一:

当我们把源字符串的内容向目标空间拼接时,源头的内容会寻找目标空间的\0,从\0处开始向后拼接!!!

讲解二:

我们已经知道了拼接时,是从目标空间的\0处开始拼接,但是源字符串中的\0会不会也被拷贝过去呢???请看调试🤩
在这里插入图片描述

可以看到,在拷贝时源字符串中的\0也被拷贝到了目标空间里,至于我为什么在Love后面添加一个\0,因为向目标空间拼接时,是从\0开始的,如果不加\0,就会从最后一个x后面向后拼接,如果不加的话,就观察不出来源字符串中的\0是否也被拷贝了过去,我们的调试也就没什么意义了!😛

🚦干货二

向目标空间拼接时,源空间中的‘\0’也会被拷贝过去!!!

🌍重点总结

1、源字符串中必须有‘\0’拼接时会将‘\0’也拷贝过去

2、字符追加时,是从‘\0’开始追加

2、目标空间必须足够大,能容得下源字符串的内容

3、目标空间必须可修改

strcat 模拟实现

#include <stdio.h>
#include <assert.h>
char* my_strcat(char* dest, const char* src)
{
	char* ret = dest;
	assert(dest && src);
	while (*dest != '\0')
	{
		dest++;
	}
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}
int main()
{
	char arr1[20] = "I Love ";
	char arr2[] = "You";
	my_strcat(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

在这里插入图片描述

🚂2.strncat

直接发车!!!

在这里插入图片描述

在这里插入图片描述

char * strnat (char * destination, char * source, size_t num)

1、char * 表示最后返回一个地址

2、char * destination 表示接受目标空间的首地址

3、char * source 表示接受源空间的首地址

4、size_t num 表示要拼接的字符个数因为个数不可能是负数,所以定义成无符号数

首先使用一下函数!

#include <string.h>
int main()
{
	char arr1[20] = "I Love ";
	char arr2[] = "them";
	strncat(arr1, arr2, 3);
	printf("%s\n", arr1);
	return 0;
}

在这里插入图片描述

给定要拼接的字符串个数,就会向目标空间拼接几个,但是,有一个问题是,后面会不会带一个‘\0’?看代码:>

在这里插入图片描述

经验证得知,就算给定一个被拼接的字符串个数,最后拼接过去后仍然会再带过去一个‘\0’

🚦干货一:😄

当要求被拼接的字符被拼接到目标空间时,最后会带一个‘\0’

新问题:如果要求拼接到目标空间的字符的个数多于源空间的字符,会发生什么?代码验证:>

在这里插入图片描述

🚦干货二

当要求拼接到目标空间的字符的个数多于源空间的字符个数,只要多了,不管多了多少,都只在最后拷贝一个‘\0’

strncat的模拟实现😏

#include <stdio.h>
#include <assert.h>
char* my_strncat(char* dest, const char* src, size_t num)
{
	assert(dest && src);
	char* ret = dest;
	while (*dest != '\0')
	{
		dest++;
	}
	while (num)
	{
		*dest++ = *src++;
		num--;
	}
	return ret;
}
int main()
{
	char arr1[20] = "I Love ";
	char arr2[] = "them";
	my_strncat(arr1, arr2, 3);
	printf("%s\n", arr1);
	return 0;
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值