strcmp()返回C中的值

我正在学习C中的strcmp() 。我知道当两个字符串相等时, strcmp返回0。

但是,当手册页指出strcmp在第一个字符串小于第二个字符串时返回小于0时,它是指长度,ASCII值还是其他什么?

从这个意义上讲,字符串的“小于”意味着词典(字母)顺序。

所以catdog还小,因为catdog之前按字母顺序排列。

在某种意义上,词典顺序是所有ASCII(和UNICODE)字符的字母顺序的扩展。

大于零的值表示不匹配的第一个字符在第一个字符串中的值大于在第二个字符串中的值,而小于零的值表示相反的值。

C99 7.21.4:

比较函数memcmpstrcmpstrncmp返回的非零值的符号由所比较的对象中不同的第一对字符(均被解释为unsigned char )的值之间的差异的符号确定。

特别要注意,结果不依赖于当前的语言环境; LC_COLLATE (参见C99 7.11)影响strcoll()strxfrm() ,但不影响strcmp()

  int strcmp (const char * s1, const char * s2) { for(; *s1 == *s2; ++s1, ++s2) if(*s1 == 0) return 0; return *(unsigned char *)s1 < *(unsigned char *)s2 ? -1 : 1; } 

查看以下程序,这里我将返回值,具体取决于您键入的字符串。 strcmp函数根据整个字符串的ASCII值完全重新计算。

例如。 str1 = "aab"str2 = "aaa"将返回1作为aab> aaa。

 int main() { char str1[15], str2[15]; int n; printf("Enter the str1 string: "); gets(str1); printf("Enter the str2 string : "); gets(str2); n = strcmp(str1, str2); printf("Value returned = %d\n", n); return 0; }