VC++ MFC中CString MakeLower抛出异常,CString::MakeLower在多字节集遇到Unicode字符导致的crash

有个数据分析采集的小项目偶尔出现异常退出,使用dump发现定位在CStringT MakeLower函数,发现问题记录下


#include "stdafx.h"
#include 
#include 
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	std::string  tmp = ":U鬱躺衻撅伙";
	CString str  = tmp.substr(0,tmp.size() - 1).c_str();				
	str.Trim();    
	str.MakeLower(); 
	return 0;
}

上述代码中在多字节集遇到unicode字符MakeLower会异常。解决方法就是使用 CharLower 函数
str = CharLower((LPSTR)str.GetString());