一:调用的规则
1. int strncmp (const char* str1, const char* str2, size_t n)
2.比较到出现另个字符不一样或者一个字符串结束或者n个字符全部比较完。
3.主要内容截取:
【参数】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。
字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strncmp( )首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,直到字符结束标志’\0’,若差值不为0,则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和’b’(98)的差值(-33)。
注意:要比较的字符包括字符串结束标志’\0’,而且一旦遇到’\0’就结束比较,无论n是多少,不再继续比较后边的字符。
【返回值】若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 若小于s2,则返回小于0的值。
二:strncmp函数的调用
1.程序代码
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[]="abcdefg";
char arr2[]="abcdefG";
char arr3[]="abcdefg";
printf(" %2d\n",strncmp(arr1,arr2,strlen(arr1)));
printf(" %2d\n",strncmp(arr1,arr3,strlen(arr1)));
printf("%2d\n",strncmp(arr2,arr3,strlen(arr1)));
return 0;
}
2.运行结果
此处可见strncmp的返回值与strcmp的返回值不太一样,想了解为什么请点击文章末尾链接查看。
三:模拟实现strncmp
1.
#include<stdio.h> //模拟实现strncmp
#include<string.h>
#include<assert.h>
int my_strncmp(const char* arr1, const char* arr2,int n)
{
int ret=0;
assert(arr1);
assert(arr2);
while(!(ret=*(unsigned char*)arr1-*(unsigned char* )arr2)
&& *arr1&& *arr2 && n)
{
arr1;
arr2;
n--;
}
return ret;
}
int main()
{
char arr1[]="abcdefg";
char arr2[]="Abcdefg";
char arr3[]="abcdefg";
int num;
printf("请输入要比较的字符长度num(num<%d):",strlen(arr1)+1);
scanf("%d",&num);
printf(" %2d\n",strncmp(arr1,arr2,num));
printf(" %2d\n",strncmp(arr1,arr3,num));
printf("%2d\n",strncmp(arr2,arr3,num));
return 0;
}
2.运行结果