我的以下测试strcmp的代码如下:
char s1[10] = "racecar";
char *s2 = "raceCar"; //yes, a capital 'C'
int diff;
diff = strcmp(s1,s2);
printf(" %d\n", diff);
所以我对为什么输出是32感到困惑。与获得结果相比,它究竟是什么?感谢您的时间和帮助。
答案 0 :(得分:1)
无论想要什么。在这种情况下,看起来你得到的值是'c' - 'C'
(字符串不同的第一个点的两个字符之间的差异),在许多系统上等于32,但你不应该&无论如何都要依靠它。你唯一能指望的是,如果两个字符串相等则返回为0,如果s1在s2之前返回为负,如果s1在s2之后则为正。
答案 1 :(得分:1)
如果字符串不相同,手册页指出输出将大于0或小于0。它没有说明确切的值(如果不是0)。
话虽这么说,c和C的ASCII码相差32,这可能就是结果的来源。但是,在任何两个给定的实现中,您都不能依赖于此行为。
答案 2 :(得分:0)
未指定。根据标准:
7.24.4.2
strcmp
函数#include <string.h> int strcmp(const char *s1, const char *s2);
<强>描述强>
strcmp
函数将s1
指向的字符串与指向的字符串进行比较s2
。<强>返回强>
strcmp
函数 返回大于,等于或小于零的整数 , 因此,s1
指向的字符串大于,等于或小于s2
指向的字符串。
答案 3 :(得分:0)
根据C标准(N1570 7.24.4.2):
strcmp
函数返回一个大于,等于的整数, 或者小于零,因为s1
指向的字符串是 大于,等于或小于指向的字符串 的s2
强>
如果字符串不相等,那么哪个它将返回正值或负值,并且可移动代码只应检查结果是否小于,等于或大于零。< / p>
话虽如此,strcmp
的直接实现可能会在不匹配的第一个字符的值中返回数字差异。在您的情况下,第一个不匹配的字符是'c'
和'C'
,在ASCII中恰好相差32。
不要指望这一点。
答案 4 :(得分:0)
“strcmp”比较字符串,当它到达不同的字符时,它将返回它们之间的差异。
在你的情况下,它在你的第一个字符串中达到'c',在你的第二个字符串中达到'C'。十六进制中的'c'是0x63而'C'是0x43。减去你得到的0x20,即十进制的32。
如果函数返回0,我们使用strcmp检查字符串是否相等。
答案 5 :(得分:0)
strcmp逐个字符地比较字符串,直到它到达不匹配的字符或终止的空字符。
因此strcmp函数看到c(在ASCII中为99)大于C(在ascii中为67),因此它返回一个正整数。无论它返回什么正整数,我认为通常由您的系统或您正在编译的任何c版本定义。