記錄一下使用CString::MakeLower可能致使的crash的一個問題:windows
問題重現:框架
int _tmain(int argc, _TCHAR* argv[])
{
std::string sTmp = ":U鬱躺衻撅夥";//參照下面參考三
CString str = sTmp.substr(0,sTmp.size() - 1).c_str();
str.TrimRight();
str.MakeLower(); //拋出異常
return 0;
} spa
-=-=-=-=-=backtrace -=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-ci
KernelBase.dll!7693b727()
[下面的框架可能不正確和/或缺失,沒有爲 KernelBase.dll 加載符號]
KernelBase.dll!7693b727()
msvcr80d.dll!_CxxThrowException(void * pExceptionObject=0x0018f974, const _s__ThrowInfo * pThrowInfo=0x0042e180) 行161 C++
> test.exe!ATL::AtlThrowImpl(HRESULT hr=E_FAIL) 行77 C++
test.exe!ATL::AtlCrtErrorCheck(int nError=42) 行48 C++
test.exe!ATL::Checked::mbslwr_s(unsigned char * _Str=0x002ac0d8, unsigned int _SizeInChars=15) 行161 + 0x20 字節 C++
test.exe!ATL::ChTraitsCRT<char>::StringLowercase(char * psz=0x002ac0d8, unsigned int size=15) 行462 + 0xd 字節 C++
test.exe!ATL::CStringT<char,ATL::StrTraitATL<char,ATL::ChTraitsCRT<char> > >::MakeLower() 行1768 + 0x10 字節 C++
test.exe!main(int argc=1, char * * argv=0x003f5198) 行18 C++
test.exe!__tmainCRTStartup() 行597 + 0x19 字節 C
test.exe!mainCRTStartup() 行414 C
kernel32.dll!760233ca()
ntdll.dll!76ef9ed2()
ntdll.dll!76ef9ea5() get
-=-=-=-=-=-=-=-=-backtrace-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=string
參考:it
1. CString::MakeLower() + Chinese Windows = crashio
2. CString::MakeUpper crashes on german umlaut, if language is japanese,微軟給出了回覆,同時在這裏給出瞭解決方案http://forums.microsoft.com/msdn/default.aspxclass
3.CString::MakeLower() 崩潰問題 ,這裏講的緣由確實會出現crash。test