我在C ++中正确使用TCHAR和_T()时遇到了问题。奇怪的事情发生在宽/窄字符表示的差异
我的服务器响应只是一个表示为TCHAR *
的字符串TCHAR * response = getTheResponseFromTheServer();
我想将此值与可能值的数组进行比较,以查看它们是否匹配。我已经将数组定义为:
TCHAR * knownCodes[] = {_T("appleCode"), _T("pearCode"), _T("grapeCode")};
但出于某种原因,当我使用tcsmpr比较数组中的值和响应时,它们不相等
_tcscmp(response, KnownProductCodes[i]) //this never returns 0; they are not equal even when i know they are
当我用%s打印它们时,只有正确显示数组中的已知代码,响应代码与????的
混杂在一起当我用%hs打印它们时,响应代码显示正确,并且只显示knownCodes [i]的第一个字母。 (a,p或g)
正确打印时,它们都打印相同的字符串“appleCode”
显然我对char和wchar之间的区别或者如何使用数组有一些错误的信息。
任何帮助将不胜感激。
答案 0 :(得分:0)
使用我在C中编写的这个快速功能来调试你的问题。注意:它不完美,可能有错误,但应该有助于你弄清楚什么是错的。它假设第一个字符(如果它是wchar_t)不使用第二个字节,如果它是来自'a'=>的字母则会发生。 'z','0'=> '9' 您可以像使用它一样使用它:
quick_debugger((wchar_t*)response, (wchar_t*)knownCodes[i]);
和
int quick_debugger(wchar_t *a, wchar_t *b)
{
int w = 1;
size_t a_len, b_len;
if (((char*)a)[1] != 0)
{
if (((char*)b)[1] == 0)
{
wprintf(L"error: response is char*, but knownCodes is wchar_t*\n");
return 1;
}
printf("comparing char* strings (%s, %s)\n", (char*)a, (char*)b);
a_len = strlen((char*)a), b_len = strlen((char*)b);
}
else if (((char*)b)[1] != 0)
{
wprintf(L"error: response is wchar_t*, but knownCodes is char*\n");
return 2;
}
else
{
wprintf(L"comparing wchar_t* strings (%s, %s)\n", a, b);
a_len = wcslen(a), b_len = wcslen(b);
w = 2;
}
if (a_len != b_len)
{
wprintf(L"length is not the same (%d, %d)", a_len, b_len);
return 3;
}
for (size_t i = 0; i < (a_len * w); i++)
{
if (((char*)a)[i] != ((char*)b)[i])
{
printf("characters at pos %d dont match: %c != %c", (i / w), ((char*)a)[i], ((char*)b)[i]);
return 4;
}
}
wprintf(L"quick_debugger: strings match\n");
return 0;
};