繁体   English   中英

在if()中比较LPCWSTR

[英]Comparing LPCWSTR in if()

我觉得我在这里遗漏了一些非常明显的东西...

在我的程序中,我使用GetWindowText()从编辑框中读取用户输入,
然后是以下代码:

if (x == L"R" || x == L"C" || x == L"L"){ n = 1; }
else{ n = 9; }

调试器清楚地表明xL"R" ,但是n被设置为9。

调试器

在这种情况下使用if()是错误的,我应该使用其他东西吗?

xwchar* 指针 调试器足够聪明,可以向您显示x指向的数据。 实际数据在内存中的其他位置。

L"R"和其他值是字符串文字 它们被实现为指向存储在应用程序的只读数据段中的wchar_t[]数组的指针。

您的if语句将指针与指针进行比较,如果指针未指向同一内存(在这种情况下,它们不会指向同一内存),则指针将失败。 要比较所指向的实际数据,您需要使用lstrcmpW()或类似的函数,例如:

if ((lstrcmpW(x, L"R") == 0) ||
    (lstrcmpW(x, L"C") == 0) ||
    (lstrcmpW(x, L"L") == 0))
{
    n = 1;
}
else
{
    n = 9;
}

我建议使用CString (在UNICODE构建中成为CStringW )而不是LPCWSTR (如果使用MFC)。 它确实有operator==()

CString str;
m_DataEdit.GetWindowText(str);

if (str == _T("R") || str == _T("C") || str == _T("L"))
{ 
  n = 1; 
}        
else
{ 
  n = 9; 
}

LPCWSTR只是const WCHAR*的定义。 因此,您应该使用wcscmp函数进行比较。 如果使用LPCTSTR_tcscmp()_T("")宏会更好。 此组合对于MBCSUNICODE构建均适用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM