我在Visual C++ MFC应用程序中有以下示例代码。CString::Find
返回错误的值,我看不出问题是什么:
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 = 1 (should be 0)
c1 = 'D' (as expected)
c2 = ')' (as expected)
s1 = "234" (instead of "1234" because Find returned the wrong value)
这是使用Microsoft Visual Studio社区2022(64位)版本17.0.5
1条答案
按热度按时间chy5wohz1#
问题不在于
CString::Find
,而是返回正确的0
值。将s.Find
移出条件即可看出这一点。问题是如何使用括号,您有:
由于
>=
的优先级高于=
,因此实际计算为nPos = (s.Find(_T("D)") >= 0)
然而,对于条件内部的赋值,您应该具有以下内容:
有关详细阅读,请查看CWE-783 Operator Precedence Logic Error