You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何C语言中"-1 < strlen(s)"结果为0?与直接比较数值的差异

问题分析:j < strlen(s)与j < 3的输出差异

示例代码

char* s =(char*) "sss";
int j = -1;
printf("%d", j < strlen(s));

核心原因

这段代码输出0,但把strlen(s)换成3就输出1,本质是类型不匹配导致的隐式转换:

  • strlen的返回值是size_t类型,这是一个无符号整数类型(标准C中定义为对应平台的无符号整数)。
  • 当有符号整数j = -1和无符号整数strlen(s)(值为3)比较时,C语言会自动把有符号的j转换成无符号类型。
  • 有符号整数-1转成无符号后,会变成该类型的最大值(比如32位环境下是0xFFFFFFFF),这个数远大于3,所以j < strlen(s)的结果是假,输出0。
  • 而直接和3比较时,3是int类型(有符号),此时-1和3都是有符号整数,-1 < 3成立,结果为真,输出1。

内容的提问来源于stack exchange,提问作者Houxiong Yao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 16:12:33