我很困惑strcmp(),或者说,它是如何由标准定义的。考虑比较两个字符串,其中一个包含ASCII-7范围之外的字符(0-127)。strcmp()和有符号/无符号字符
C标准定义:
INT的strcmp(常量字符* S1,常量字符* S2);
strcmp函数将s1指向的字符串与s2指向的字符串 进行比较。
的的strcmp函数返回一个整数大于,等于,或小于零 ,因此作为 串指向S1大于 ,等于,或小于 串s2指向到。
参数是char *
。不是unsigned char *
。没有观念认为“应该以unsigned
进行比较”。
但我检查过的所有标准库都认为“高”字符就是这样,的值高于的值,而不是ASCII-7字符。
我明白这是有用的和预期的行为。我不想说现有的实现是错误的或什么的。我只想知道,哪些部分在标准规格中我错过了?
int strcmp_default(const char * s1, const char * s2)
{
while ((*s1) && (*s1 == *s2))
{
++s1;
++s2;
}
return (*s1 - *s2);
}
int strcmp_unsigned(const char * s1, const char *s2)
{
unsigned char * p1 = (unsigned char *)s1;
unsigned char * p2 = (unsigned char *)s2;
while ((*p1) && (*p1 == *p2))
{
++p1;
++p2;
}
return (*p1 - *p2);
}
#include <stdio.h>
#include <string.h>
int main()
{
char x1[] = "abc";
char x2[] = "abü";
printf("%d\n", strcmp_default(x1, x2));
printf("%d\n", strcmp_unsigned(x1, x2));
printf("%d\n", strcmp(x1, x2));
return 0;
}
输出是:
103
-153
-153
看看这篇文章。 http://www.ddj.com/cpp/184402023 – adatapost 2009-08-31 10:14:59
......这与这个问题有关,因为......? – DevSolar 2009-08-31 11:01:30