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

关于C语言strlen函数的比较问题:直接与赋值后比较结果不同

问题原因解析

先看你的代码片段:

char string[] = {"1234"};
int len = strlen(string);
int bool;
bool = -1 < strlen(string);
printf("%d",bool); //bool=0
bool = -1 < len;
printf("%d",bool); //bool=1

问题的核心是**strlen的返回类型是无符号整数**:

  • C标准里,strlen的返回值是size_t类型,这是一个专门用来表示长度的无符号整数类型(通常和unsigned int或unsigned long对应)。
  • 当你直接写-1 < strlen(string)时,C语言会自动触发隐式类型转换:有符号的-1会被转换成size_t类型的无符号数。转换后,-1会变成size_t能表示的最大值(比如32位系统下是0xFFFFFFFF),这个数远大于strlen("1234")的结果4,所以比较结果为假,输出0。
  • 而把strlen的结果赋值给int len时,size_t类型的4被转换成有符号的int,此时-1和len都是有符号整数,-1 < 4显然成立,输出1,符合你的预期。

如果要直接和strlen比较得到正确结果,可将strlen的结果强制转换为有符号整数:-1 < (int)strlen(string),这样逻辑就和赋值给int后一致了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:50:39