strcmp函数是用来比较字符串大小的,但是比较的并不是字符串的长度,而是比较的是字符串的字符大小,abd就大于abcde,比较的时候是比较对应位置的字符大小。
标准规定:
1、第一个字符串大于第二个字符串,则返回大于0的数字
2、第一个字符串等于第二个字符串,则返回0
3、第一个字符串小于第二个字符串,则返回小于0的数字
由于编译器的不同,返回的数字也是不同的,在vs2019中返回的是1 0 -1这三个数字,而在有的编译器中返回的是对应位置不相等字符的ASCII码值的差。
我们模拟一下这个函数
int my_strcmp(const char* str1, const char* str2)
{
while (*str1 == *str2)
{
if (*str1 == '\0')
{
return 0;
}
str1++;
str2++;
}
if (*str1 > *str2)
{
return 1;
}
else
{
return -1;
}
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcedf";
int red = my_strcmp(arr1, arr2);
printf("%d", red);
return 0;
}
当然,我们也可以返回它的对应位置上的不相等字符的差
int my_strcmp(const char* str1, const char* str2)
{
while (*str1 == *str2)
{
if (*str1 == '\0')
{
return 0;
}
str1++;
str2++;
}
return *str1 - *str2;
}