strncat、strncpy、strncmp是长度受限制的字符串函数
strncat——字符串的拼接更安全
与strcat不同的是
- strncat会将dest字符串最后的’\0’覆盖掉,字符追加完成后,再追加’\0’;
- strncat的循环结束的条件则是所要追加的字符串个数为0;
- strncat()用来连接源字符串的前n个字符到目标字符串后,所以要多传一个参数n
strncat (将字符串追加到的位置,要补充的字符串,限制字符串长度n)
char * strncat ( char * destination , const char * source , size_t num )
例如:char* strncat(char* dest, const char* src, int n)中n的作用
1. 防止缓冲区溢出
当目标字符串 dest
的剩余空间有限时,使用 n
可以避免因复制过多字符而导致缓冲区溢出。例如,如果 dest
剩余空间只能容纳 5 个字符,那么可以将 n
设置为 5,这样函数最多只会复制 5 个字符到 dest
中,保证不会超出 dest
的容量。
2. 部分追加
有时候我们并不需要将整个源字符串 src
追加到目标字符串 dest
中,只需要追加其中的一部分。此时可以通过设置 n
的值来控制追加的字符数量。比如,源字符串 src
为 "abcdefg"
,我们只需要追加前 3 个字符,就可以将 n
设置为 3。
int main()
{
char arr1[20] = "hello ";
char arr2[] = "world";
strncat(arr1, arr2,3);
return 0;
}
结果为 hello wor
strncpy——字符串的拷贝更安全
strncpy函数用于将一个字符串复制到另一个字符串。
与strcpy不同的是
- 拷贝num个字符从源字符串到目标空间
- 如果源字符串长度小于num,则拷贝完源字符串之后,在目标后面追加0,直到num个
strncpy (将字符串拷贝到的位置,要拷贝的字符串,限制字符串长度n)
char * strncpy ( char * destination , const char * source , size_t num )
int main()
{
char arr1[20] = "xxxxxxxxxx";
char arr2[] = "abcdef";
int num = 3;
strncpy(arr1, arr2, num);
printf("%s\n", arr1);
return 0;
}
结果为abcxxxxxxx
strncmp——字符串的拷贝更安全
头文件:#include < string.h >
stncmp( 第一个字符串,第二个字符串,要比较的个数)
int stncmp( const char * str 1,const char * str 2,size_t num)
返回值:
str1=str2 返回0
str1>str2 返回大于0的数
str1<str2 返回小于0的数
int main()
{
char* p1 = "abcdefgh";
char* p2 = "abcdujskz";
int ret=strncmp(p1, p2, 5);
printf("%d\n", ret);
return 0;
}
结果为-1