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

再前几篇的博客中大家可能发现了,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

猜你喜欢

转载自blog.csdn.net/JX_BC/article/details/129640778
今日推荐