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
相关产品推荐
相关产品推荐

