在使用Unicode的工程項目中,如果是Debug模式。 當(dāng)TRACE Unicode字符串時,會輸出提示:_CrtDbgReport: String too long or IO Error 有兩種方法來解決這個問題
方法一:直接使用 OutputDebugString 替換 TRACE 相關(guān)說明:函數(shù)原型:void OutputDebugString(LPCTSTR lpOutputString); 功能說明:該函數(shù)輸出一個字符串給調(diào)試器用于顯示 例子: 原語句:TRACE(_T("\n這是一個TRACE語句")); 替換為:OutputDebugString (_T("\n這是一個TRACE語句")); 其他相關(guān)函數(shù): 1. CheckRemoteDebuggerPresent:用于判斷指定進程是否在調(diào)試狀態(tài) 2. ContinueDebugEvent:使調(diào)試器繼續(xù)運行之前報告了debugging event的線程 3. DebugActiveProcess:使調(diào)試器附加到一個活動進程上并進行調(diào)試 4. DebugActiveProcessStop:停止正在調(diào)試指定進程的調(diào)試器 5. DebugBreak:在當(dāng)前進程中觸發(fā)一個斷點 6. DebugBreakProcess:在指定的進程中觸發(fā)一個斷點 7. DebugSetProcessKillOnExit:空白 8. FatalExit:空白 8. FlushInstructionCache:空白 10. GetThreadContext:空白 11. GetThreadSelectorEntry:空白 12. IsDebuggerPresent:空白 13. OutputDebugString: 14. ReadProcessMemory:空白 15. SetThreadContext:空白 16. WaitForDebugEvent:空白 17. WriteProcessMemory:空白 方法二:調(diào)用setlocale將語言環(huán)境設(shè)置成中文 相關(guān)說明: 函數(shù)原型:char *setlocale(int category,const char *locale ); 功能說明:給指定的類別設(shè)置語言環(huán)境 注意:需要將原先的語言環(huán)境保存,待使用完后將其恢復(fù)。 例子: #include <locale.h> char* old_locale = _strdup( setlocale(LC_ALL,NULL) ); setlocale( LC_ALL, "chs" ); //正常使用TRACE,退出時調(diào)用下面函數(shù) setlocale( LC_ALL, old_locale);free(old_locale); 其他相關(guān)函數(shù): 1. char *_strdup(const char *strSource ); 調(diào)用malloc分配內(nèi)存,并將源字符串復(fù)制一份,需要用free釋放。 //====================================================================== 優(yōu)缺點比較: 方法一:優(yōu)點:不需要增加任何函數(shù)調(diào)用,可以直接使用OutputDebugString輸出字符串 缺點:不能格式化輸出。需要預(yù)先將字符串格式化 方法二:優(yōu)點:可以直接使用TRACE,不加任何改變 缺點:需要進行例子中的操作。 疑問: 1. 調(diào)用char* plocale = setlocale(LC_ALL,NULL); 返回值是"C."對嗎? |
|