TCHAR字符串在UNICODE环境下
是不能直接用cout 输出的, 原因是 cout 为 ostream流对象实例,直接用cout 输出TCHAR字符串会输出字符串的地址
</pre><pre name="code" class="cpp"> //TODO:测试代码
//得到了非空一个字符串,则查找成功。
//......
//.....将该字符串转换为TCHAR.....
//......
USES_CONVERSION;
const TCHAR *tempID_Result; //返回得到的ID
tempID_Result = A2CT(ID_ResultTemp);
for (int i = 0; i < m_table.size(); i++)
{
if (0 == _tcscmp(tempID_Result, m_table[i].ID))
{
wcout << "你好:" << &(m_table[i].UserName) << " 通过了认证" << endl;
cout << "你好:" << (m_table[i].UserName) << " 通过了认证" << endl;
wcout << "你好:" << (m_table[i].UserName) << " 通过了认证" << endl;
//_tprintf(_T("XXXXXXXXXXXXXXXXX\n"));
//_tprintf(_T("你好: 通过了认证\n"));
//_tprintf(_T("你好: %s 通过了认证\n"), m_table[i].UserName);
//_tprintf(_T("XXXXXXXXXXXXXXXXX\n"));
}
}
//END: 测试代码
截屏
可以看出来 cout 在Unicode环境下 只能输出地址 ,
所以不应该使用cout, 可以使用wcout。
wcout重载了TCHAR,可以对TCHAR进行输出,因为TCHAR在Unicode中即定义为WCHAR。
想了一个办法,先对环境进行判断然后调用适当的输出函数
示例代码如下:
//TODO:测试代码
const TCHAR *tempID_Result; //返回得到的ID
tempID_Result = A2CT(ID_ResultTemp);
for (int i = 0; i < m_table.size(); i++)
{
if (0 == _tcscmp(tempID_Result, m_table[i].ID))
{
#ifdef _UNICODE
wcout << "你好:" << (m_table[i].UserName) << " 通过了指静脉认证" << endl;
#endif
#ifdef _MBCS
cout << "你好:" << (m_table[i].UserName) << " 通过了指静脉认证" << endl;
#endif
}
}
//END: 测试代码
此外注意:在UNICODE环境下TCHAR字符串如果是中文, 是不能用_tprintf输出的。
示例
#include <iostream>
#include <tchar.h>
using namespace std;
int main()
{
_tprintf(_T("你好啊\n"));
return 0;
}
显示不出来。。。。。。