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系统( 貌似 和 这个关系不大)

解决方案 »

  1.   

    http://blog.sina.com.cn/s/blog_702b606a0100y56b.html
    再使用 TRACE ("---- %S",str);可以输出了或者是http://topic.csdn.net/u/20081215/21/38b67908-9152-4ebf-8d8a-9c8afb826dc7.html
      

  2.   

    OutputDebugString( str); 可以使用。
      

  3.   


    请问  请问 %s  为何只输出 一个 字符还有 貌似 它们说 修改 debug输出 让其 支持 unicode  我的vs2010 不知道 在工程的哪里修改 
      

  4.   

    楼主理解了%s和%S的区别吗?跟程序的字符集设置有关。
    如果你的程序是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串指针),当然只显示一个字符。希望这是真实原因,否则我感觉无从解释。
      

  5.   

    说的没错啊   多谢指教. 
    解释了 %S 和 %s 的问题
    至于 中文报错 那是 debug 本身的问题了~~