{
char*
paName = "
测试中";
wchar_t* pwName = L"
测试中";
printf(paName); //
输出为:测试中
wprintf((wchar_t*)paName); //
输出为:空
printf((char*)pwName); //
输出为:乱码
wprintf(pwName); //
输出为:空
}
如果将程序改写如下,则输出的结果就不一样了
{
char*
paName = "
测试中";
wchar_t* pwName = L"
测试中";
setlocale(LC_ALL, "chs");
printf(paName); //
输出为:测试
wprintf((wchar_t*)paName); //
输出为:空
printf((char*)pwName); //
输出为:乱码
wprintf(pwName); //
输出为:测试
}
从上面两个代码片断可以看出:setlocale()对printf()没有影响,同时对char*的字符串也没有影响。唯一受到影响的是wprintf()这个函数了。我通过调试器查看了paName和pwName的字符,他们分别是:
paName :b2e2 cad4 d6d0 …… 应该是CHS编码(也就是代码页936)
wcout.imbue(local("chs");