最简单的if..else判断语句,问题出在哪里?
以下为代码及输出截图:明明计算两个字符串长度之差为-1,小于0成立,为何会执行else语句? 本帖最后由 bin554385863 于 2019-11-29 20:10 编辑
dequantianhe 发表于 2019-11-29 18:52
返回的不是整型么?字符串的长度啊
strlen()的返回值是无符号整形;
两个无符号整形计算出来的值也是无符号整形,如果计算结果是负数你看下面的代码
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char *s1 = "love";
char *s2 = "fishc";
printf("%u\n", strlen(s1) - strlen(s2));
return 0;
}
======================================
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的返回值是什么类型的?strlen(str1) - strlen(str2)又是什么类型的 bin554385863 发表于 2019-11-29 18:41
我先问你strlen的返回值是什么类型的?strlen(str1) - strlen(str2)又是什么类型的
返回的不是整型么?字符串的长度啊 sanguine_boy 发表于 2019-11-29 18:40
我运行没毛病呀
额,不是吧,我这就是反着来的 bin554385863 发表于 2019-11-29 19:02
strlen()的返回值是无符号整形;
两个无符号整形计算出来的值也是整形,如果计算结果是负数你看下面的代码 ...
好吧,其实我是忽略了strlen()返回值是不是U了,没考虑到这个,顺便问下,C语言有查看变量类型的函数么? dequantianhe 发表于 2019-11-29 19:19
好吧,其实我是忽略了strlen()返回值是不是U了,没考虑到这个,顺便问下,C语言有查看变量类型的函数么?
纯C语言没有这种函数,C++有
页:
[1]