다음을 통해 공유


wcrtomb_s

와이드 문자는 이것의 멀티 바이트 문자 표현으로 변환합니다. CRT의 보안 기능에 설명된 대로 보안 향상 기능이 포함된 wcrtomb 버전입니다.

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

매개 변수

  • [out] pReturnValue
    기록된 바이트의 수 또는 만일 오류가 발생되었다면 -1을 반환합니다.

  • [out] mbchar
    결과 멀티 바이트를 문자로 변환합니다.

  • [in] sizeOfmbchar
    바이트에서 mbchar 변수의 크기입니다.

  • [in] wchar
    변환할 와이드 문자입니다.

  • [in] 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++에서는 템플릿 오버로드로 인해 이러한 함수를 사용하는 것이 보다 간단해 집니다. 오버로드는 버퍼 길이를 자동으로 유추할 수 있으며(크기 인수를 지정할 필요가 없어짐), 기존의 비보안 함수를 보다 최신의 보안 대응 함수로 자동으로 바꿀 수 있습니다. 자세한 내용은 안전한 템플릿 오버로드을 참조하십시오.

예외

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");
    }
}
  

해당 .NET Framework 항목

해당 사항 없음. 표준 C 함수를 호출하려면 PInvoke를 사용합니다. 자세한 내용은 플랫폼 호출 예제를 참조하십시오.

요구 사항

루틴

필수 헤더

wcrtomb_s

<wchar.h>

참고 항목

참조

데이터 변환

로캘

멀티바이트 문자 시퀀스 해석

mbsinit