>백엔드 개발 >C++ >mbstowcs()를 사용하여 char를 wchar_t로 변환하려고 시도하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?

mbstowcs()를 사용하여 char를 wchar_t로 변환하려고 시도하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-29 07:56:30525검색

Why Does Attempting to Convert char to wchar_t with mbstowcs() Lead to Unexpected Results?

유니코드 통합을 위해 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.