鱼C论坛

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

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

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


  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5.         int a,b;
  6.        
  7.         static char s[][10]={"while","for","switch","if","break","continue"};
  8.         a = strcmp(s[5],s[4]);
  9.         b = strcmp(s[4],s[3]);       
  10.         printf("%d , %d",a,b);
  11.        
  12.         return 0;
  13. }
复制代码


最佳答案
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, 2024-4-26 12:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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