Unicode下TRACE中文(_CrtDbgReport: String too long or IO Error) .解决办法

Unicode下TRACE中文(_CrtDbgReport: String too long or IO Error)       

在使用Unicode的工程项目中,如果是Debug模式。
当TRACE Unicode字符串时,会输出提示:_CrtDbgReport: String too long or IO Error

有两种方法来解决这个问题

方法一:直接使用 OutputDebugString 替换 TRACE

相关说明:
函数原型:void OutputDebugString(LPCTSTR lpOutputString);
功能说明:该函数输出一个字符串给调试器用于显示
例子:
原语句:TRACE(_T("\n这是一个TRACE语句"));
替换为:OutputDebugString (_T("\n这是一个TRACE语句"));
其他相关函数:
1. CheckRemoteDebuggerPresent:用于判断指定进程是否在调试状态
2. ContinueDebugEvent:使调试器继续运行之前报告了debugging event的线程
3. DebugActiveProcess:使调试器附加到一个活动进程上并进行调试
4. DebugActiveProcessStop:停止正在调试指定进程的调试器
5. DebugBreak:在当前进程中触发一个断点
6. DebugBreakProcess:在指定的进程中触发一个断点
7. DebugSetProcessKillOnExit:空白
8. FatalExit:空白
8. FlushInstructionCache:空白
10. GetThreadContext:空白
11. GetThreadSelectorEntry:空白
12. IsDebuggerPresent:空白
13. OutputDebugString:
14. ReadProcessMemory:空白
15. SetThreadContext:空白
16. WaitForDebugEvent:空白
17. WriteProcessMemory:空白

方法二:调用setlocale将语言环境设置成中文
相关说明:
函数原型:char *setlocale(int category,const char *locale );
功能说明:给指定的类别设置语言环境
注意:需要将原先的语言环境保存,待使用完后将其恢复。
例子:
#include <locale.h>
char* old_locale = _strdup( setlocale(LC_ALL,NULL) );   

setlocale( LC_ALL, "chs" );              

//正常使用TRACE,退出时调用下面函数    

setlocale( LC_ALL, old_locale);
free(old_locale);
其他相关函数:
1. char *_strdup(const char *strSource );
   调用malloc分配内存,并将源字符串复制一份,需要用free释放。

//======================================================================
优缺点比较:
方法一:优点:不需要增加任何函数调用,可以直接使用OutputDebugString输出字符串
                缺点:不能格式化输出。需要预先将字符串格式化
方法二:优点:可以直接使用TRACE,不加任何改变
                缺点:需要进行例子中的操作。

疑问:

1. 调用char* plocale = setlocale(LC_ALL,NULL);    返回值是"C."对吗?

时间: 2024-10-25 16:09:14

Unicode下TRACE中文(_CrtDbgReport: String too long or IO Error) .解决办法的相关文章

php插入中文到sqlserver 2008里出现乱码的解决办法分享_php技巧

今天使用php操作数据库时发现插入SQL Server 2008数据库里的中文字段出现乱码,下面是我一开始时的一些情况: 开发环境是php5.3.3+Apache2.2.17+SQL Server 2008,php脚本文件的编码是utf-8,传给数据库的编码是GB2312(SQL Server的默认字符编码可能是这个,我不肯定),我用的是微软官方提供的SQLSRV库来连接数据库的(PS:SQL Server 2005开始已经不支持用mssql.dll来连接了),故使用sqlsrv_query($

linux下xhost命令报错:unable to open display的解决办法

  linux下执行xhost命令报错:unable to open display,解决方法,linux 下通过xhost进入图形界面,经常会出现报错"unable to open display" linux下的操作步骤如下: 1.复制代码: 复制内容到剪贴板 [root@localhost ~]# vncserver New 'localhost:1 (root)' desktop is localhost:1 Starting applications specified in

windows下写的shell脚本在linux执行出错的解决办法_linux shell

在Windows下写了一个shell脚本,上传到Linux下执行时报错: 复制代码 代码如下: [root@localhost test]# ./test.sh   -bash: ./test.sh: /bin/sh^M: bad interpreter: No such file or directory test.sh源码:  复制代码 代码如下: #!/bin/sh  echo "test shell " 由于自己对shell不太熟悉,找同事沟通了后了解了原委,主要原因是test

Win8/8.1下metro界面应用无法打开并且有叉号解决办法

如下图所示我们metro界面中的应用商店应用无法开启并且每一个应用的右下角都会有一个白色的叉子标志. 解决方案: 1. 现在我们进入到win8系统中点击metro点击应用商店按钮,正常登录进入应用商店,效果如下图所示: 2. 打开应用之后我们按下Win+C组合键,会打开"超级按钮栏"之后我们再点击"设置"然后在进入到的设置选项中请您找到应用更新选项,使用鼠标左键单击或触摸屏幕触摸操作,打开应用更新选项界面 3. 请您找到选项中的同步许可证按钮,使用鼠标左键点击或使用

Win7系统下无法正常识别iphone怎么办,无法正常识别iphone解决办法

在Win7系统下,安装了iTunes,连上iphone,PC可以识别,但iTunes无反应.   方法一:   1.完全卸载iTunes.   2.重装Windows7.(这是必须的,因为不管怎样卸载有些东西还是删除的不干净)   新的系统做好后~~ 只需要三个勾选就可解决问题哦!   3.控制面板---程序--打开或关闭windows功能:        点开红色圈起的小加号把这两个子选项勾上,如图:       4.下拉至       把这个选项勾上,如图:     点确定.OK了!完成安装

Win7系统下提示&quot;不是内部或外部命令&quot;时有什么解决办法

  使用Win7系统在进入命令提示符状态后,不管执行什么DOS命令都提示:**不是内部或外部命令,也不是可运行的程序或批处理文件.那么究竟是什么导致这种问题发生呢? 首先,出现这种情况是因为某些软件修改了PATH的值.解决方法很简单,鼠标右键点击我的电脑→属性→高级系统设置→环境变量,看看PATH值里面是什么?比如某些软件会改成C:PRogram Files (x86)StormIICodec;C:Program Files (x86)StormII,还把真正的系统文件地址给删除掉. 现在你在P

Win7下Skype最小化默认不到系统托盘的解决办法

MSN的用户都绑定到Skype上面了,不常使用真是很多东西不习惯.最小化Skype竟然还留在状态栏里面,想直接缩小到系统托盘(通知区域)里面.具体的设置方法为: 1.工具 -> 选项 2.高级 -> 高级设置 3.去掉"注册后把Skype保留在Windows 7的任务栏里"前面的选择,点击保存按钮即可.

CentOS下PureFtp出现“数据 Socket 错误 连接已超时”错误解决办法

前段时间配置了PureFTP上传程序,但期间出现种种让人不爽的问题!比如在本地使用 FlashFTP 时出现最多的"数据 Socket 错误 连接已超时"错误,无论使用主动还是被动模式上传,都会有类似错误! [右] 数据 Socket 错误: 没有到主机的通道 [右] 列表 错误 [右] PASV [右] 227 Entering Passive Mode (116,255,246,176,83,197) [右] 正在打开数据连接 IP: 116.255.246.176 端口: 214

Visual studio 2010 中文SP1 无法安装Silverlight5 Beta Tools的解决办法

和之前安装vs2010中文版安装 英文silverlight4tools遇到的问题一样,所以解决办法也一样! 打开注册表 命令:regedit 打开节点:hkey_local_machinesoftwaremicrosoftvisualstudio10.0setupvsbuildnumber 在此处增加一个"字符串值",输入名称为"1033",设置它的值为"10.0.40219" ok 重新运行 silverlight5_tools.exe安装即