다음을 통해 공유


wcsrtombs

와이드 문자열을 멀티바이트 문자열 표현으로 변환합니다. 이 함수의 더 안전한 버전을 사용할 수 있습니다. 를 참조하세요 wcsrtombs_s.

구문

size_t wcsrtombs(
   char *mbstr,
   const wchar_t **wcstr,
   sizeof count,
   mbstate_t *mbstate
);
template <size_t size>
size_t wcsrtombs(
   char (&mbstr)[size],
   const wchar_t **wcstr,
   sizeof count,
   mbstate_t *mbstate
); // C++ only

매개 변수

mbstr
변환된 결과 멀티바이트 문자열의 주소 위치입니다.

wcstr
변환할 와이드 문자열의 위치를 간접적으로 가리킵니다.

count
변환할 문자 수입니다.

mbstate
mbstate_t 변환 상태 개체에 대한 포인터입니다.

반환 값

정상적으로 변환된 바이트의 수를 반환합니다. null 종결 null 바이트(있는 경우)는 포함되지 않습니다. 오류가 발생하면 -1을 반환합니다.

설명

wcsrtombs 함수는 mbstate에 포함된 지정한 변환 상태부터 시작하여 와이드 문자열을 wcstr에서 간접적으로 가리키는 값에서 mbstr의 주소로 변환합니다. 이 변환은 null 종결 와이드 문자열이 나오거나, 해당하지 않는 문자가 나오거나, 다음 문자를 변환하면 count에 포함된 제한을 초과할 때까지 각 문자에 대해 계속됩니다. wcsrtombscount가 나올 때나 그 전에 와이드 문자 null 문자(L'\0')를 발견하면 해당 문자를 8비트 0으로 변환한 후 실행을 중지합니다.

따라서 mbstr의 멀티바이트 문자열은 wcsrtombs가 변환 중에 와이드 문자 null 문자를 발견하는 경우에만 null로 종결됩니다. wcstr이 가리키는 시퀀스와 mbstr이 가리키는 시퀀스가 겹치는 경우 wcsrtombs의 동작이 정의되지 않습니다. 현재 로캘의 LC_TYPE 범주가 wcsrtombs에 영향을 줍니다.

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

mbstr 인수가 NULL이면 wcsrtombs는 대상 문자열에 필요한 바이트 크기를 반환합니다. mbstate가 null이면 내부 mbstate_t 변환 상태가 사용됩니다. 문자 시퀀스에 wchar 해당 멀티바이트 문자 표현이 없으면 -1이 반환되고 errno 해당 문자가 로 설정 EILSEQ됩니다.

C++에서 이 함수는 해당 최신 보안 버전을 호출하는 템플릿 오버로드를 포함합니다. 자세한 내용은 안전한 템플릿 오버로드를 참조하세요.

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

예외

wcsrtombs 함수가 실행되는 mbstate 동안 현재 스레드 호출 setlocale 에 함수가 없고 null이 아닌 한 함수는 다중 스레드로부터 안전합니다.

예시

// crt_wcsrtombs.cpp
// compile with: /W3
// This code example converts a wide
// character string into a multibyte
// character string.

#include <stdio.h>
#include <memory.h>
#include <wchar.h>
#include <errno.h>

#define MB_BUFFER_SIZE 100

int main()
{
    const wchar_t   wcString[] =
                    {L"Every good boy does fine."};
    const wchar_t   *wcsIndirectString = wcString;
    char            mbString[MB_BUFFER_SIZE];
    size_t          countConverted;
    mbstate_t       mbstate;

    // Reset to initial shift state
    ::memset((void*)&mbstate, 0, sizeof(mbstate));

    countConverted = wcsrtombs(mbString, &wcsIndirectString,
                               MB_BUFFER_SIZE, &mbstate); // C4996
    // Note: wcsrtombs is deprecated; consider using wcsrtombs_s
    if (errno == EILSEQ)
    {
        printf( "An encoding error was detected in the string.\n" );
    }
    else
    {
        printf( "The string was successfuly converted.\n" );
    }
}
The string was successfuly converted.

요구 사항

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

참고 항목

데이터 변환
Locale
멀티바이트 문자 시퀀스 해석
wcrtomb
wcrtomb_s
wctomb, _wctomb_l
wcstombs, _wcstombs_l
mbsinit