Jef*_*f G 1 mfc visual-studio visual-c++
我在 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);
}
Run Code Online (Sandbox Code Playgroud)
我在调试器中得到的结果是:
nPos = 1 (should be 0)
c1 = 'D' (as expected)
c2 = ')' (as expected)
s1 = "234" (instead of "1234" because Find returned the wrong value)
Run Code Online (Sandbox Code Playgroud)
这是使用 Microsoft Visual Studio Community 2022(64 位)版本 17.0.5
问题不在于CString::Find返回正确的值,这可以通过移出条件0来看到。s.Find
nPos = s.Find(_T("D)"));
if (nPos >= 0)
Output: nPos = 0 (As expected)
Run Code Online (Sandbox Code Playgroud)
问题是你如何拥有括号,你有:
if (nPos = s.Find(_T("D)")) >= 0)
Run Code Online (Sandbox Code Playgroud)
因为>=具有比=这更高的优先级,实际计算为nPos = (s.Find(_T("D)") >= 0)
但是,对于条件内的赋值,您应该具有以下内容:
if ((nPos = s.Find(_T("D)"))) >= 0)
Run Code Online (Sandbox Code Playgroud)
如需进一步阅读,请查看CWE-783 运算符优先级逻辑错误
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |