CString str ;
当用 TRACE ( ---- %s ,str) 的时候 显示 第一个字符 // 例如 str = L"1231baaf" 只会显示一个 1当用 TRACE ( ---- %S ,str) 的时候 可以全部显示 //但是 str = L"faa今天" 程序就崩溃了
经过我的试验 貌似 用%S的时候 TRACE 汉字 就会出错 而 %s 又不是 %c 为何只显示一个字符?
各位高手解释一下 这个 现象ps
1 .程序崩溃肯定是 这条TRACE语句引起的 我加了断点调试的,
2 .使用VS2010 默认向导建立的对话框工程 win7系统( 貌似 和 这个关系不大)
当用 TRACE ( ---- %s ,str) 的时候 显示 第一个字符 // 例如 str = L"1231baaf" 只会显示一个 1当用 TRACE ( ---- %S ,str) 的时候 可以全部显示 //但是 str = L"faa今天" 程序就崩溃了
经过我的试验 貌似 用%S的时候 TRACE 汉字 就会出错 而 %s 又不是 %c 为何只显示一个字符?
各位高手解释一下 这个 现象ps
1 .程序崩溃肯定是 这条TRACE语句引起的 我加了断点调试的,
2 .使用VS2010 默认向导建立的对话框工程 win7系统( 貌似 和 这个关系不大)
再使用 TRACE ("---- %S",str);可以输出了或者是http://topic.csdn.net/u/20081215/21/38b67908-9152-4ebf-8d8a-9c8afb826dc7.html
请问 请问 %s 为何只输出 一个 字符还有 貌似 它们说 修改 debug输出 让其 支持 unicode 我的vs2010 不知道 在工程的哪里修改
如果你的程序是UNICODE,那么%s表示对应的参数是一个WCHAR*,而%S对应的参数是一个char*
如果你的程序是ANSI,那么%s表示对应的参数是一个char*,而%S对应的参数是一个WCHAR*从现象看,你的CString貌似被理解成CStringA了,应该跟TRACE和格式化字符串统一才对,理论上不应该出现这种错误。我猜测唯一的可能性是:
1、你的程序是用UNICODE方式编译的
2、CString==CStringW
3、TRACE的格式化串写错了,应该用TRACE(L"%s", str); 结果你用了TRACE("%s", str); TRACE宏本身用的是ATL中的AtlTrace类,它同时支持UNICODE/ANSI两种格式化串写法,都不会导致编译错误,但是如果你用ANSI格式化串,后面可变参数的含义就可能被理解成是ANSI串指针(实际它是UNICODE串指针),当然只显示一个字符。希望这是真实原因,否则我感觉无从解释。
解释了 %S 和 %s 的问题
至于 中文报错 那是 debug 本身的问题了~~