strncat函数详解看这一篇就够了-C语言(函数实现、使用用法举例、作用、与strcat的区别)

首先要明确strncat的功能是:从字符串src的开头拷贝n个字符到dest字符串尾部

目录

函数介绍:

与strcat的区别

函数实现:

用法示例:

结果展示:


函数介绍:


函数原型:char* strncat(char* dest, const char* src, int num)

头  文  件:#include <string.h>
返  回  值:返回dest字符串的起始地址
说  明:

  1. dest要有足够的空间来容纳要拷贝的字符串
  2. strncat会将dest字符串最后的’\0’覆盖掉,字符追加完成后,再追加’\0’
  3. 如果num大于字符串src的长度,那么仅将src全部追加到dest的尾部;如果num小于字符串src的长度,该字符会将src的所有字符附加在dest末尾。无论哪种情况,都会在新字符串的末尾添加空字符。

与strcat的区别

大家可以先对比一下两个函数:

char* My_strcat(char* dest, const char* src)

char* My_strncat(char* dest, const char* src, int n)

1、strcat()增加字符串的结束条件是src == ‘\0’;

     strncat的循环结束的条件则是所要追加的字符串个数为0;

2、strcat() 函数把源字符串整个连接到目标字符串的后面;

      strcat()方便之处在于只用传两个参数可以实现,比较简便;

      strncat()用来连接源字符串的前n个字符到目标字符串后,所以要多传一个参数n

3、strcat本质上是把目标字符串的’\0’与源字符串的元素交换实现的,当连接的是自己的时候,就          会陷入死循环,那么这时只能使用strncat函数了
建议:建议采用strncat(),因为不会出现上述的陷入死循环的可能,并且strncat()有一个不可或缺            的优势,就是能够自由控制要增加的字符个数

函数实现:

//dest为前面的字符串,src为后面要加的字符串,n为要拷贝的字符个数
char* My_strncat(char* dest, const char* src, int n)
{
	char* ret = dest;  //将dest首地址储存在ret中,在之后dest++运算中,可以方便找到
	assert(dest != NULL && src != NULL);  //保证dest、src非空
	while (*dest != '\0')//用指针往后一个个找,找到dest结尾的‘\0’
	    dest++;
	while (n && (*dest++ = *src++) != '\0')//把src里的字符一个个放入dest后
		//(*dest++ = *src++) 表示先把*src赋给*dest,再把两个指针同时往后移一位(方便下次循环)
	     n--;   //循环跳出条件
	*dest = '\0';      //字符追加完成后,再追加’\0’
	return ret; //返回dest字符串起始地址
}

用法示例:

#include <stdio.h>
#include<string.h>
#include <assert.h>
//dest为前面的字符串,src为后面要加的字符串,n为要拷贝的字符个数
char* My_strncat(char* dest, const char* src, int n)
{
	char* ret = dest;  //将dest首地址储存在ret中,在之后dest++运算中,可以方便找到
	assert(dest != NULL && src != NULL);  //保证dest、src非空
	while (*dest != '\0')//用指针往后一个个找,找到dest结尾的‘\0’
	    dest++;
	while (n && (*dest++ = *src++) != '\0')//把src里的字符一个个放入dest后
		//(*dest++ = *src++) 表示先把*src赋给*dest,再把两个指针同时往后移一位(方便下次循环)
	     n--;   //循环跳出条件
	*dest = '\0';      //字符追加完成后,再追加’\0’
	return ret; //返回dest字符串起始地址
}
int main()
{
	char arr1[20] = "I LOVE YOU ";
	My_strncat(arr1, "SORRY" ,3);
	//经过函数My_strncat后 ,arr1里应该是字符串I LOVE YOU SOR
	printf("arr1: %s\n", arr1);
	return 0;
}

结果展示:

  • 9
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
strncat函数C语言中的字符串函数,用于将一个字符串的一部分追加到另一个字符串的末尾。函数原型如下: ```c char *strncat(char *dest, const char *src, size_t n); ``` 该函数的参数含义如下: - dest:目标字符串,即要将src字符串追加到该字符串末尾的字符串; - src:源字符串,即要从该字符串的一部分复制到目标字符串中; - n:要复制的字符数,即src中要复制的字符数。 函数返回值为指向目标字符串的指针。 该函数的具体实现如下: 1. 先将指针p指向目标字符串dest的末尾(即字符串中的'\0'字符); 2. 循环复制源字符串src中的字符到目标字符串dest中,直到复制n个字符或者src中的'\0'字符复制完毕; 3. 在目标字符串dest的末尾添加'\0'字符,以表示字符串的结束。 需要注意的是,如果目标字符串dest的长度不足以容纳src中要复制的字符数n,则复制的字符数可能会少于n个字符。 以下是strncat函数的一个示例: ```c #include <stdio.h> #include <string.h> int main() { char str1[20] = "Hello"; char str2[] = " world!"; strncat(str1, str2, 4); printf("%s\n", str1); return 0; } ``` 输出结果为:Hello wor 在上面的示例中,源字符串str2中的前4个字符" wor"被复制到了目标字符串str1的末尾,最终结果为"Hello wor"。需要注意的是,目标字符串str1的长度为20,在追加str2字符串时,只复制了前4个字符,因此字符串末尾还有很多空余字符。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值