유니코드 통합을 위해 char를 wchar_t로 올바르게 변환하는 방법
char 문자열을 wchar_t로 변환는 일반 문자열을 유니코드 응용 프로그램에 통합하는 데 필수적입니다. 일반적인 접근 방식 중 하나는 mbstowcs() 함수를 이용하는 것입니다.
원래 시도:
다음 코드는 간단한 구현처럼 보일 수 있지만 불행하게도 예상치 못한 결과를 낳습니다.
<code class="c++">const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t wc[cSize]; mbstowcs (wc, c, cSize); return wc; }</code>
더 깊이 탐구:
문제는 wc를 지역 변수로 선언하는 데 있습니다. 함수 반환 시 wc 할당이 취소되고 함수에는 가비지 메모리를 가리키는 포인터가 남게 됩니다.
해결책:
이 문제를 해결하려면 wc에 대한 메모리를 동적으로 할당합니다. 그리고 그에 대한 포인터를 반환합니다. 아래 수정된 코드는 이를 보여줍니다.
<code class="c++">const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t* wc = new wchar_t[cSize]; mbstowcs (wc, c, cSize); return wc; }</code>
주의 사항:
이제 호출 코드가 메모리 방지를 위해 동적으로 할당된 메모리 할당을 취소한다는 점에 유의하는 것이 중요합니다. 누출.
위 내용은 mbstowcs()를 사용하여 char를 wchar_t로 변환하려고 시도하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!