长度受限制的字符串函数详解(strncpy,strncat,strncmp)

1.另类字符串拷贝函数strncpy

对于字符串的拷贝函数:strcpy函数,笔者在之前已经有过详细的讲解!!有意者请参考链接:字符串拷贝函数:strcpy的详解及模拟实现_念君思宁的博客-CSDN博客但是这篇博客讲解的仍是字符串拷贝函数!!这两个函数有什么不同呢???请跟着笔者思路来进行走下去!!

char * strncpy ( char * destination, const char * source, size_t num )

 在该段代码中:destination是指:目标空间;source 是指:源头; num是指: 限制拷贝的字符数!因此,全部合起来的意思大致为:从源头开始,拷贝num个到目标空间里面

下面请看笔者的代码:简单详解一下:


#include <stdio.h>
#include <string.h>

int main()
{
	char arr1[20] = "abcdef";
	char arr2[] = "xxx";
	strncpy(arr1, arr2, 2);
	printf("%s\n", arr1);
	return 1;
}

对于上述代码的运行结果……其实各位老铁都能想象的出来!毕竟,笔者对于strncpy的语法部分已经讲解的很清楚了!!代码的运行结果为:

 但是,疑问也随之而来!!到底还要不要拷贝'\0'呢??疑惑!!!其实这个疑惑,可以经过我们的VS调试可以看出来!!请看……

调试之前的结果为:

 调试之后的结果为:

 因此,关于是否拷贝'\0'这个问题的答案是显而易见的:不拷贝!!

但是对于num请不要滥用,否则将会出现错误……请看案列:

#include <stdio.h>
#include <string.h>

int main()
{
	char arr1[20] = "abcdef";
	char arr2[] = "xxx";
	strncpy(arr1, arr2, 8);
	//这里面的num为8,已经超过arr2的大小!!
	printf("%s\n", arr1);
	return 1;
}

上述的该段代码就是一个错误的案列,请各位老铁不要模仿!!至于代码的运行情况,我们可以在调试的过程中观察出来!!

调试前的运行情况为:

调试之后的运行情况为:

 这是一段及其不负责的写法!请不要参考借鉴!!请按照规范来进行答题!!

综上所述:我们可以总结出来一下规律:

拷贝num个字符串,从源字符串到目标空间,但是,如果源字符串的长度小于num,则拷贝完,源字符串之后,在目标空间的后面加'\0', 直到num个!!

2.另类字符串追加函数:strncat

char * strncpy ( char * destination, const char * source, size_t num )

对于上述语法中:destination 是指:目标空间,cource 是指:源头!num是指个数!因此,总的来说:是将源头的num个字符追加在目标空间!

对于该另类字符串追加函数(strncat)的使用:请详见下列代码:

#include <stdio.h>
#include <string.h>

int main()
{
	char arr1[20] = "abcdef";
	char arr2[] = "wang";
	strncat(arr1, arr2, 2);
	printf("%s\n", arr1);
	return 0;
}

对于上述代码,就是另类字符串追加函数strncat的使用!!因此,代码的运行结果想必大家也是在心里面直接就能想象的出来!在此就不做过多的讲解!请看代码的运行结果为:

 那么疑问也随之而来:对于上述代码,在追加的时候,会不会追加'\0'在后面???

因此,我们可以将上述的代码进行简单的更改:arr1[20]="abcdef\0qqqq"  请参考……


#include <stdio.h>
#include <string.h>

int main()
{
	char arr1[20] = "abcdef\0qqqq";
	char arr2[] = "wang";
	strncat(arr1, arr2, 2);
	printf("%s\n", arr1);
	return 0;
}

对于上述代码的运行结果:

 这样我们就可以通过调试来观察是否追加'\0'了!!

调试到最后,结果为:

 根据上述的调试截图,我们可以看出来:追加了'\0'!!!

因此,对于上述的总结有:strncat字符串追加函数让我追加num个,我就追加num个,追加完就停下来,默认'\0'!!!

那么思考一下!!strncat函数,是否可以实现自己追加自己呢???

答案也是显而易见的:可以实现自己追加自己!

下面请参考一下代码:

#include <stdio.h>
#include <string.h>

int main()
{
	char arr1[20] = "abcd";
	strncat(arr1, arr1, 4);
	printf("%s\n", arr1);
	return 0;
}

对于这个代码,可以实现字符串自己追加自己!!不信的各位老铁,请耐心欣赏笔者之后的截图证明!!

证明一下:strncat函数可以实现自己追加自己的调试……

调试之后的结果为:

 代码的运行结果为:

因此,strncat函数,可以实现自己追加自己!!

3.strncmp另类字符串比较函数!!

 

int strncmp ( const char * str1, const char * str2, size_t num )

 上述语法的简单意思为:将str1 与 str2中的num个字符进行比较!!

返回类型为int(整型)!!

str1 > str2  返回一个大于0的数字:1

str1 < str2  返回一个小于0的数字:-1

str1 < str2  返回0


对于这个情况,想必读者也能很好的理解!!


#include <stdio.h>
#include <string.h>

int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abq";
	
	char arr3[] = "abcd";
	char arr4[] = "abc";

	char arr5[] = "abc";
	char arr6[] = "abc";

	int ret = strncmp(arr1, arr2,3);
	if (ret > 0)
	{
		printf("arr1>arr2\n");
	}
	else if (ret < 0)
	{
		printf("arr1<arr2\n");
	}
	else
	{
		printf("arr1==arr2\n");
	}
	return 0;
}

这段代码也能诠释strncmp函数的返回值!!

代码的运行结果为:

 到此为止:长度受限制的字符串函数详解(strncpy,strncat,strncmp)已经讲解完毕!!!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

念君思宁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值