我觉得我错过了一些非常明显的东西......
在我的程序中,我使用GetWindowText()
,来自编辑框的用户输入
接下来是这段代码:
if (x == L"R" || x == L"C" || x == L"L"){ n = 1; }
else{ n = 9; }
调试器明确指出x
为L"R"
,但n
设置为9.
在这种情况下使用if()
是否错误,我应该使用别的吗?
答案 0 :(得分:7)
x
是wchar*
指针。调试器非常智能,可以显示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 构建。