다음을 통해 공유


wcrtomb_s

와이드 문자를 멀티바이트 문자 표현으로 변환합니다. CRTwcrtomb 보안 기능에 설명된 대로 향상된 보안 기능이 있는 버전입니다.

구문

errno_t wcrtomb_s(
   size_t *pReturnValue,
   char *mbchar,
   size_t sizeOfmbchar,
   wchar_t *wchar,
   mbstate_t *mbstate
);
template <size_t size>
errno_t wcrtomb_s(
   size_t *pReturnValue,
   char (&mbchar)[size],
   wchar_t *wchar,
   mbstate_t *mbstate
); // C++ only

매개 변수

pReturnValue
기록된 바이트 수를 반환하거나, 오류가 발생하면 -1을 반환합니다.

mbchar
멀티바이트로 변환된 결과 문자입니다.

sizeOfmbchar
mbchar 변수의 크기(바이트)입니다.

wchar
변환할 와이드 문자입니다.

mbstate
mbstate_t 개체에 대한 포인터입니다.

반환 값

0을 반환하거나, 오류가 발생하면 errno 값을 반환합니다.

설명

wcrtomb_s 함수는 mbstate에 포함된 지정한 변환 상태부터 시작하여 와이드 문자를 wchar에 포함된 값에서 mbchar로 표시되는 주소로 변환합니다. pReturnValue 값은 변환된 바이트 수이지만 MB_CUR_MAX바이트까지만 반환되며 오류가 발생한 경우에는 -1이 반환됩니다.

mbstate가 null이면 내부 mbstate_t 변환 상태가 사용됩니다. 포함된 wchar 문자에 해당 멀티바이트 문자가 없으면 값 pReturnValue 은 -1이고 함수는 값을 EILSEQ반환합니다errno.

함수는 wcrtomb_s 다시 시작 가능성에 따라 다릅니다wctomb_s_wctomb_s_l. 같거나 다른 다시 시작 가능 함수에 대한 후속 호출에서는 변환 상태가 mbstate에 저장됩니다. 다시 시작할 수 있는 함수와 다시 시작할 수 없는 함수를 함께 사용할 때는 결과가 정의되지 않습니다. 예를 들어 wcstombs_s 대신 후속 wcsrtombs_s 호출을 사용하는 경우 애플리케이션은 wcslen 대신 wcsrlen을 사용해야 합니다.

C++에서는 템플릿 오버로드로 인해 이러한 함수를 간편하게 사용할 수 있습니다. 오버로드는 버퍼 길이를 자동으로 유추할 수 있으며(크기 인수를 지정할 필요가 없어짐), 기존의 비보안 함수를 보다 최신의 보안 대응 함수로 자동으로 바꿀 수 있습니다. 자세한 내용은 보안 템플릿 오버로드를 참조 하세요.

기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT의 전역 상태를 참조하세요.

예외

wcrtomb_s 함수는 이 함수가 실행 중인 동안 현재 스레드의 함수가 setlocale을 호출하지 않으며 mbstate가 null이면 다중 스레드로부터 안전합니다.

예시

// crt_wcrtomb_s.c
// This program converts a wide character
// to its corresponding multibyte character.
//

#include <string.h>
#include <stdio.h>
#include <wchar.h>

int main( void )
{
    errno_t     returnValue;
    size_t      pReturnValue;
    mbstate_t   mbstate;
    size_t      sizeOfmbStr = 1;
    char        mbchar = 0;
    wchar_t*    wchar = L"Q\0";

    // Reset to initial conversion state
    memset(&mbstate, 0, sizeof(mbstate));

    returnValue = wcrtomb_s(&pReturnValue, &mbchar, sizeof(char),
                            *wchar, &mbstate);
    if (returnValue == 0) {
        printf("The corresponding wide character \"");
        wprintf(L"%s\"", wchar);
        printf(" was converted to a the \"%c\" ", mbchar);
        printf("multibyte character.\n");
    }
    else
    {
        printf("No corresponding multibyte character "
               "was found.\n");
    }
}
The corresponding wide character "Q" was converted to a the "Q" multibyte character.

요구 사항

루틴에서 반환된 값 필수 헤더
wcrtomb_s <wchar.h>

참고 항목

데이터 변환
Locale
멀티바이트 문자 시퀀스 해석
mbsinit