鱼C论坛

 找回密码
 立即注册
查看: 2081|回复: 3

[已解决]关于strcmp( )的问题

[复制链接]
发表于 2021-8-2 21:26:45 | 显示全部楼层 |阅读模式
1鱼币
下面的代码,为什么用strcmp( )比较字符串“break”和“if”,输出的是负数而不是整数?

#include<stdio.h>
#include<string.h>
int main()
{
        int a,b;
        
        static char s[][10]={"while","for","switch","if","break","continue"};
        a = strcmp(s[5],s[4]);
        b = strcmp(s[4],s[3]);        
        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

运行结果截图

运行结果截图

最佳答案

查看完整内容

break 和 if 比 ,'b' ASCII码是66 ,'i' ASCII码是73。 66 break。strcmp("break","if ")返回-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-2 21:26:46 | 显示全部楼层    本楼为最佳答案   
break 和 if 比 ,'b' ASCII码是66 ,'i' ASCII码是73。 66<73。所以 if > break。strcmp("break","if ")返回-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 码之差作为比较结果由函数值返回。因此使用函数进行逻辑判断时应特别注意。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-3 21:18:09 | 显示全部楼层
两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-6 18:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表