摘自:http://www.cnblogs.com/BeyondTechnology/archive/2011/01/09/1931533.html
wprintf_s 不能正常 输 出中文的解决 办 法
使用如下方法 调 用wprintf_s 输 出中文 时 往往出 现带 ? 的乱 码 :
wprintf_s (L "%s" ,(LPCWSTR )cmdLineArr [1]);
解决方案 : 包含 头 文件 locale.h , 并在程序开始 调 用 setlocale (LC_ALL , "chs" );
这样 wprintf_s 便能正常打印出中文字符串了 :
// 指定当前程序的 编码为简 体中文, 这样 才能用wprintf 正确 输 出中文
#include <locale.h>
setlocale(LC_ALL, "chs");
同 样对 于 TRACE(_T(" 第一个: %s, 第二个: %s"),str1,str2); ,如果运行 输 出信息:“ _CrtDbgReport: String too long or IO Error” 。亦可用上述方法解决。
TRACE 在定 义时 就已考 虑 了 unicode ,所以不需要加 _T
可以采用 OutputDebugString() 来代替 TRACE ,它自 动 采用 UNICODE 和非 UNICODE
Microsoft Visual Studio Feedback 上的反馈
http://connect.microsoft.com/VisualStudio/feedback/details/425215/bug-with-trace-and-crtdbgreport
There is a bug with TRACE and _CrtDbgReport when working with the wide string.
_CrtDbgReport can't handle the wide string correctly when the wide string contains non-ascii characters.
貌似在 Beta 2 of Visual Studio 2010. 修正了该 bug