首先strcmp中字符串不是比较字符串长度,而是比较单个字符。
例如:
char arr1[] = "op";
char arr2[] = "abcdef";char arr3[] = "abc";
上面每个字符隐藏义工'\0';
arr1第一字符o与arr2第一字符a比较显然o的ascll值更大,往后就不比较了,所以就是arr1大。
同理:arr2第一字符a与arr3第一字符a,相等继续往下比较 最后d比'\0'的ascll值更大,往后就不比较了,所以就是arr2大。
strcmp(arr1,arr2);如果arr1大于arr2返回大于0的数;相等返回0;小于返回小于0的数。
//模拟实现strcmp #include<stdio.h> #include<string.h> #include<assert.h> int my_strcmp(const char* a1, const char* a2) { assert(a1 && a2); //字符相等继续后进去为下一次比较做准备。 while (*a1 == *a2) { a1++; a2++; } return *a1 - *a2; } int main() { char arr1[10] = "op"; char arr2[] = "abcdef"; printf("%d\n", strcmp(arr1, arr2)); printf("%d\n", my_strcmp(arr1, arr2)); return 0; }
![]()
printf("%d\n", strcmp(arr1, arr2));
printf("%d\n", my_strcmp(arr1, arr2));