小翔迷妹 发表于 2021-8-2 21:26:45

关于strcmp( )的问题

下面的代码,为什么用strcmp( )比较字符串“break”和“if”,输出的是负数而不是整数?


#include<stdio.h>
#include<string.h>
int main()
{
        int a,b;
       
        static char s[]={"while","for","switch","if","break","continue"};
        a = strcmp(s,s);
        b = strcmp(s,s);       
        printf("%d , %d",a,b);
       
        return 0;
}


不大不小甲鱼 发表于 2021-8-2 21:26:46

break 和 if 比 ,'b' ASCII码是66 ,'i' ASCII码是73。 66<73。所以 if > break。strcmp("break","if ")返回-1

XYcarpenter 发表于 2021-8-2 22:01:04

参考资料如下:
strcmp函数用于两个字符串的比较:

1、strcmp函数接受两个字符串类型的参数传入,根据比较结果返回一个int类型的值。

2、若返回结果的值小于 0,则表示在ASCII码上, str1字符串 小于 str2字符串。

3、若返回结果返回值 大于0,则代表 str2字符串 小于 str1字符串。

4、只有当返回值 为0时,两个字符串才是相同的。

该函数只能用于比较字符串,不能比较数字等其他形式的参数,否则会报错。

根据ANSI的标准,函数的返回值为正数,负数,0 。不同的C返回的数值会有所不同。当两个字符串不相等时,C的标准没有规定返回值会是 1 或 -1,只规定了正数和负数。

通常情况下,会将两个字符的 ASCII 码之差作为比较结果由函数值返回。因此使用函数进行逻辑判断时应特别注意。

小翔迷妹 发表于 2021-8-3 21:18:09

两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。
页: [1]
查看完整版本: 关于strcmp( )的问题