什么是strcmp(字符串比较)呢?

时间:2016-10-27 00:25:56

标签: c strcmp

我的以下测试strcmp的代码如下:

char s1[10] = "racecar";
char *s2 = "raceCar";     //yes, a capital 'C'
int diff;
diff = strcmp(s1,s2);
printf(" %d\n", diff);

所以我对为什么输出是32感到困惑。与获得结果相比,它究竟是什么?感谢您的时间和帮助。

6 个答案:

答案 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版本定义。