🔧 限制 🔧
上述 strcpy、strcat、strcmp、长度是不受限制的字符串函数
而下面所说的是长度受限制的字符串函数了>>>
起始记住下面这个只需要在上面的基础上加上个str后面+n即可(^∀^●)ノシ
下面所介绍的3种函数相对比上的使用要更加安全,但并不是绝对安全。
🎋strncmp() - 比较字符串(受长度限制)🎋
strncmp() 函数的声明方式如下 👇
int strncmp(const char *str1, const char *str2, size_t n)
str1 → 要进行比较的第一个字符串。
str2 → 要进行比较的第二个字符串。
n → 要比较的最大字符数。
这个函数开始比较每个字符串的第一个字符。如果它们相等,则继续执行下面的对,直到字符不同,直到达到一个结束的空字符,或直到两个字符串中的num字符匹配,以先发生的为准。
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。
🎋strncmp()函数代码示例🎋
使用 strncpy() 函数代码示例如下 👇
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main(void)
{
char str1[20];
char str2[20];
strcpy(str1, "Cyuyan");
strcpy(str2, "Cyuyanyyds");
printf("%d", strncmp(str1, str2, 6));
return 0;
}
运行结果如下 👇
0 → 代表str1 等于 str2
如果这里没有追加字符串的话结果就会是-1,因为str1<str2。正因为我们追加了字符为6,它才可以是str1 = str2。
🎋strncmp()源程序实现🎋
示例代码如下:👇
int __cdecl strncmp
(
const char *first,
const char *last,
size_t count
)
{
size_t x = 0;
if (!count)
{
return 0;
}
/*
* This explicit guard needed to deal correctly with boundary
* cases: strings shorter than 4 bytes and strings longer than
* UINT_MAX-4 bytes .
*/
if( count >= 4 )
{
/* unroll by four */
for (; x < count-4; x+=4)
{
first+=4;
last +=4;
if (*(first-4) == 0 || *(first-4) != *(last-4))
{
return(*(unsigned char *)(first-4) - *(unsigned char *)(last-4));
}
if (*(first-3) == 0 || *(first-3) != *(last-3))
{
return(*(unsigned char *)(first-3) - *(unsigned char *)(last-3));
}
if (*(first-2) == 0 || *(first-2) != *(last-2))
{
return(*(unsigned char *)(first-2) - *(unsigned char *)(last-2));
}
if (*(first-1) == 0 || *(first-1) != *(last-1))
{
return(*(unsigned char *)(first-1) - *(unsigned char *)(last-1));
}
}
}
/* residual loop */
for (; x < count; x++)
{
if (*first == 0 || *first != *last)
{
return(*(unsigned char *)first - *(unsigned char *)last);
}
first+=1;
last+=1;
}
return 0;
}