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

C语言中strlen(s)-strlen(t)>0判断结果为真的原因是什么

问题原因

核心是strlen函数的返回值类型特性导致的:

  • strlen的返回值类型是size_t,属于无符号整数类型,所有取值都为非负数。
  • 两个无符号整数做减法运算时,计算结果也会被判定为无符号整数。你代码中strlen(s)的值为3、strlen(t)的值为5,二者相减的结果在无符号规则下不会得到有符号的-2,而是一个极大的正整数,该数值远大于变量c的取值0,因此条件strlen(s)-strlen(t)>c判定结果为真,和预期不符。
修复方案

有两种常见的修复方式:

  1. 强制将strlen的返回值转换为有符号整数后再做运算:
int len = (( (int)strlen(s) - (int)strlen(t) ) > c) ? strlen(s) : strlen(t);
  1. 如果你的需求只是取两个字符串的长度最大值,可以直接比较两个长度值,避免减法运算带来的类型异常,这种写法更稳妥:
int len = (strlen(s) > strlen(t)) ? strlen(s) : strlen(t);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:36:04