Visual Studio CString::Find返回错误值

kmbjn2e3  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(133)

我在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

chy5wohz

chy5wohz1#

问题不在于CString::Find,而是返回正确的0值。将s.Find移出条件即可看出这一点。

nPos = s.Find(_T("D)"));
if (nPos >= 0)

Output: nPos = 0 (As expected)

问题是如何使用括号,您有:

if (nPos = s.Find(_T("D)")) >= 0)

由于>=的优先级高于=,因此实际计算为nPos = (s.Find(_T("D)") >= 0)
然而,对于条件内部的赋值,您应该具有以下内容:

if ((nPos = s.Find(_T("D)"))) >= 0)

有关详细阅读,请查看CWE-783 Operator Precedence Logic Error

相关问题