【C语言进阶:刨根究底字符串函数】strncpy、strncat、strncmp函数

文章介绍了C语言中为了提高安全性而引入的strncpy,strncat,strncmp三个函数,它们限制了字符串操作的长度,避免了潜在的溢出风险。strncpy会拷贝指定数量的字符并填充零,strncat追加字符串并自动添加,strncmp则在指定长度内比较两个字符串。VS编译器推荐使用带_s后缀的安全版本,如strcpy_s等。
摘要由CSDN通过智能技术生成

再前几篇的博客中大家可能发现了,strcpy,strcat,strcmp 这三个函数在使用时对源字符串没有长度限制,几乎是将源字符串的内容全部进行操作。在VS编译器中的这些函数显得不安全了,因此VS会提醒你在其后加上  _s  ,或者在首行加上 #define _CRT_SECURE_NO_WARNINGS

由于这些原因,C语言又引入了 strncpy,strncat,strncmp 等长度受限制的一组相对来说比较安全的函数。


⚡strncpy

  •  Copies the first num characters of source to destination. If the end of the source C string(which is signaled by a null-character) is found before num characters have been copied,destination is padded with zeros until a total of num characters have been written to it.
  • 拷贝num个字符从源字符串到目标空间。
  • 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加\0,直到num个。

strncpy的基本使用: 

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

int main()
{
	char arr1[] = "abcdef";
	char arr2[5] = { 0 };
	strncpy(arr2, arr1, 3);
	printf("%s\n", arr2);
	return 0;
}

 运行结果如下:


⚡strncat

  •  strncat 函数再追加完后自动会在其后补上一个 \0。
  • 如果输入的追加长度大于源字符串中的字符个数,那么在追加完源字符串(包括 \0 )后不会再凑剩下的字符了。

代码示例如下:

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

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

运行结果如下:

strncat 可以自己给自己追加。 


⚡strncmp

  • 比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。

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

int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abc";
	int ret = strncmp(arr1, arr2, 3);
	printf("%d\n", ret);
	return 0;
}

 运行结果如下:

当然在VS中 strcpy_s,strcat_s,strcmp_s 也可以用来作为长度受限的函数。 


感谢大家能够看完这篇博客,创作时长,小伙伴们觉得我的博客对你有帮助,不妨留下你的点赞的收藏,关注我,带你了解不一样的C语言。

98b76a6f4a9c4ca88fd93da1188ac6f9.gif

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值