我正在学习C中的strcmp()
。我明白当两个字符串相等时,strcmp
会返回0.
但是,当第一个字符串小于第二个字符串时,手册页指出strcmp
返回的值小于0时,它是指长度,ASCII值还是其他什么?
答案 0 :(得分:26)
从这个意义上讲,字符串的“小于”意味着词典(字母)顺序。
所以cat
小于dog
,因为cat
按字母顺序排在dog
之前。
在某种意义上,字典顺序是所有ASCII(和UNICODE)字符的字母顺序的扩展。
答案 1 :(得分:8)
大于零的值表示不匹配的第一个字符在第一个字符串中的值大于在第二个字符串中的值,而小于零的值表示相反的值。
答案 2 :(得分:6)
C99 7.21.4:
比较函数返回的非零值的符号 memcmp , strcmp 和 strncmp 由符号决定 第一对字符的值之间的差异(两者都有 解释为 unsigned char ),对象不同 比较。
特别注意结果不依赖于当前的语言环境; LC_COLLATE
(参见C99 7.11)影响strcoll()
和strxfrm()
,但不影响strcmp()
。
答案 3 :(得分:2)
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;
}
答案 4 :(得分:-2)
请注意以下程序,这里我将返回值,具体取决于您键入的字符串。函数strcmp
根据整个字符串的ASCII值完全重新计算值。
例如。 str1 = "aab"
和str2 = "aaa"
将返回1作为aab&gt; 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;
}