在if()中比较LPCWSTR

时间:2015-03-27 21:26:39

标签: c++ winapi visual-c++

我觉得我错过了一些非常明显的东西......

在我的程序中,我使用GetWindowText(),来自编辑框的用户输入 接下来是这段代码:

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

调试器明确指出xL"R",但n设置为9.

debugger

在这种情况下使用if()是否错误,我应该使用别的吗?

2 个答案:

答案 0 :(得分:7)

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;
}

答案 1 :(得分:0)

我建议使用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("")宏,效果会更好。这种组合适用于 MBCS UNICODE 构建。