我正在学习C语言中的strcmp()函数。我知道当两个字符串相等时,strcmp()函数返回0。
但是,当man手册上说当第一个字符串小于第二个字符串时,strcmp()函数返回值小于0,它指的是长度、ASCII值还是其他什么?
但是,当man手册上说当第一个字符串小于第二个字符串时,strcmp()函数返回值小于0,它指的是长度、ASCII值还是其他什么?
在这个意义上,字符串的“小于”表示按字典顺序(即字母顺序)排序。
因此,cat
小于dog
,因为cat
在字典上排在dog
之前。
字典顺序在某种程度上是将所有ASCII(和UNICODE)字符扩展到字母顺序的一种方式。
如果返回值大于零,表示第一个不匹配的字符在第一个字符串中的值大于在第二个字符串中的值;如果返回值小于零,则相反。
C99 7.21.4:
比较函数memcmp、strcmp和strncmp返回的非零值的符号由被比较对象中第一对不同字符(都解释为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;
}
strcmp()
的宽字符版本。但是,是的,我明白你的意思。 - Mysticial