鱼C论坛

 找回密码
 立即注册
查看: 1512|回复: 7

[已解决]最简单的if..else判断语句,问题出在哪里?

[复制链接]
发表于 2019-11-29 18:31:26 | 显示全部楼层 |阅读模式
1鱼币
以下为代码及输出截图:
截图.png
截图2.png

明明计算两个字符串长度之差为-1,小于0成立,为何会执行else语句?
最佳答案
2019-11-29 18:31:27
本帖最后由 bin554385863 于 2019-11-29 20:10 编辑
dequantianhe 发表于 2019-11-29 18:52
返回的不是整型么?字符串的长度啊


strlen()的返回值是无符号整形;
两个无符号整形计算出来的值也是无符号整形,如果计算结果是负数你看下面的代码
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(int argc, char const *argv[])
  4. {
  5.     char *s1 = "love";
  6.     char *s2 = "fishc";
  7.     printf("%u\n", strlen(s1) - strlen(s2));
  8.     return 0;
  9. }
复制代码

======================================
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode\Code>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-v11px5jh.nzo --stdout=Microsoft-MIEngine-Out-pmye5ctb.aph --stderr=Microsoft-MIEngine-Error-nm2njqrt.n3c --pid=Microsoft-MIEngine-Pid-homsv1p1.s2i --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
4294967295

E:\Users\admin\Documents\VScode\Code>

这才是实际值.
现在你说咋回事?

最佳答案

查看完整内容

strlen()的返回值是无符号整形; 两个无符号整形计算出来的值也是无符号整形,如果计算结果是负数你看下面的代码 ====================================== Microsoft Windows [版本 10.0.18363.476] (c) 2019 Microsoft Corporation。保留所有权利。 E:%users\admin\Documents\VScode\Code>c:%users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-29 18:31:27 | 显示全部楼层    本楼为最佳答案   
本帖最后由 bin554385863 于 2019-11-29 20:10 编辑
dequantianhe 发表于 2019-11-29 18:52
返回的不是整型么?字符串的长度啊


strlen()的返回值是无符号整形;
两个无符号整形计算出来的值也是无符号整形,如果计算结果是负数你看下面的代码
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(int argc, char const *argv[])
  4. {
  5.     char *s1 = "love";
  6.     char *s2 = "fishc";
  7.     printf("%u\n", strlen(s1) - strlen(s2));
  8.     return 0;
  9. }
复制代码

======================================
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode\Code>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-v11px5jh.nzo --stdout=Microsoft-MIEngine-Out-pmye5ctb.aph --stderr=Microsoft-MIEngine-Error-nm2njqrt.n3c --pid=Microsoft-MIEngine-Pid-homsv1p1.s2i --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
4294967295

E:\Users\admin\Documents\VScode\Code>

这才是实际值.
现在你说咋回事?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-29 18:40:01 | 显示全部楼层
我运行没毛病呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-29 18:41:32 | 显示全部楼层
我先问你strlen的返回值是什么类型的?strlen(str1) - strlen(str2)又是什么类型的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-29 18:52:54 | 显示全部楼层
bin554385863 发表于 2019-11-29 18:41
我先问你strlen的返回值是什么类型的?strlen(str1) - strlen(str2)又是什么类型的

返回的不是整型么?字符串的长度啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-29 18:53:36 | 显示全部楼层

额,不是吧,我这就是反着来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-29 19:19:11 | 显示全部楼层
bin554385863 发表于 2019-11-29 19:02
strlen()的返回值是无符号整形;
两个无符号整形计算出来的值也是整形,如果计算结果是负数你看下面的代码 ...

好吧,其实我是忽略了strlen()返回值是不是U了,没考虑到这个,顺便问下,C语言有查看变量类型的函数么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-29 20:09:04 | 显示全部楼层
dequantianhe 发表于 2019-11-29 19:19
好吧,其实我是忽略了strlen()返回值是不是U了,没考虑到这个,顺便问下,C语言有查看变量类型的函数么?

纯C语言没有这种函数,C++有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 20:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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