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

Visual C++ MFC中CString::Find返回错误值问题求助

问题根源:运算符优先级导致CString::Find结果被错误赋值

你的代码中if语句的问题出在运算符优先级上:>=的优先级高于赋值运算符=,导致nPos没有被正确赋值为CString::Find的返回值。

实际执行流程:

  • 首先调用s.Find(_T("D)")),返回正确的匹配位置0
  • 接着计算0 >= 0,得到布尔值true,在C++中会被转换为整数1
  • 最后将1赋值给nPos,这就是调试时nPos = 1的原因

修正后的代码只需给赋值表达式加上括号,强制改变执行顺序:

int     nPos;
CString s, s1;
TCHAR   c1, c2;

s = _T("D)1234");
if ((nPos = s.Find(_T("D)"))) >= 0)
{
    c1 = s.GetAt(0);
    c2 = s.GetAt(1);
    s1 = s.Mid(nPos + 2);
}

修正后,nPos会先被赋值为Find的返回值0,再判断0 >= 0,条件成立后s1 = s.Mid(0 + 2)会得到预期的"1234"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:13:19