wchar -> char -> String
- wchar -> char로 문자열을 변환 하려고 하는데,
인터넷에서 찾은 함수는 메모리 할당하고 해제 해주지 않고
그 메모리를 포인터로 넘겨줘서 메모리 사용에 좋지 못할 것 같아서 수정하였다. - 함수 WCharToChar, ToUTF8Str 두개 사용
- 메모리를 할당 받아서 WCharToChar 함수로 포인터 넘겨줌
// wchar -> char void WCharToChar(const wchar_t* pwstrSrc, char * pstr) { setlocale(LC_ALL, "korean"); assert(pwstrSrc); #if !defined _DEBUG int len = 0; len = (wcslen(pwstrSrc) + 1)*2; char* pstr = (char*) malloc ( sizeof( char) * len); WideCharToMultiByte( 949, 0, pwstrSrc, -1, pstr, len, NULL, NULL); #else int nLen = wcslen(pwstrSrc); int count = 0; count = wcstombs(pstr, pwstrSrc, nLen+1); // 여기서 와이드에서 멀티 바이트로 변환 #endif } |
std::string ToUTF8Str(const WCHAR *S, const int NumChars) { std::string Result = ""; int BufferLen = NumChars + 1; char* pstr = (char*) malloc ( sizeof( char) * BufferLen + 1); WCharToChar(S, pstr); // 여기서 호출 해서 Result.assign(pstr); // String 으로 변환 해준 후 free(pstr); // 메모리 해제 return Result; } |
만약 wcstombs() 사용하는데 뒤에 부분이 잘린다면
pstr의 크기를 2배로 늘려주면 됨
버퍼 크기 문제였음ㅜㅜ
문자열 짜잉나 !!