长度受限制的字符串函数详解(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)已经讲解完毕!!!
- 点赞
- 收藏
- 关注作者
评论(0)