다음을 통해 공유


wcsrtombs

와이드 문자열을 멀티 바이트 문자 문자열 표현으로 변환 합니다.보다 안전한 버전의이 함수를 사용할 수 있습니다. see 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

매개 변수

  • [out] mbstr
    그 결과 멀티 바이트 문자 문자열의 주소 위치로 변환 합니다.

  • [in] wcstr
    간접적으로 포인트 변환 하는 와이드 문자열의 위치입니다.

  • [in] count
    변환할 문자의 수입니다.

  • [in] mbstate
    에 대 한 포인터를 mbstate_t 변환 상태 개체입니다.

반환 값

오류가 발생 하면 null 바이트 (있는 경우), 그렇지 않으면-1을 종료 null을 포함 하지 않는 변환 했습니다 바이트 수를 반환 합니다.

설명

wcsrtombs 함수에 포함 된 지정 된 변환 상태에서를 시작 하 여 와이드 문자의 문자열 변환 mbstate에서 가리키는 값 간접에서 wcstr, 주소에 mbstr.때까지 각 문자에 대 한 변환을 계속 합니다: 비 해당 문자가 있으면 와이드 종료 null을 발생 한 후 나 다음 문자 포함 된 한도 초과 할 때 count.경우 wcsrtombs 와이드 문자 null 문자 ('\ 0' L) 하기 전 또는 때 발견 한 count 발생 하면 해당 파일을 변환 하면 8 비트 0 다음 중지 합니다.

따라서 멀티 바이트 문자 문자열을 mbstr 경우에 null로 끝나는 wcsrtombs 와이드 문자 null 문자를 변환 하는 동안 발견 한.시퀀스 가리키는 경우 wcstr 및 mbstr 겹치는 동작을 wcsrtombs 는 정의 되지 않습니다.wcsrtombs현재 로캘 LC_TYPE 범주별으로 영향을 받습니다.

wcsrtombs 다른 함수에서 wcstombs, _wcstombs_l 를 재시작 하면 됩니다.변환 상태 저장 됩니다 mbstate 같은 또는 다른 다시 시작 함수 호출에 대 한.혼합 가지가 함수를 사용 하는 경우 결과가 정의 되지 않습니다.예를 들어, 응용 프로그램 사용 wcsrlen 대신 wcsnlen, 후속 호출 하는 경우 wcsrtombs 대신 사용 된 wcstombs.

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

C + +에서이 함수는 새, 보안 대응이 함수를 호출 하는 템플릿 오버 로드가 됩니다.자세한 내용은 보안 템플릿 오버 로드를 참조하십시오.

예외

wcsrtombs 함수는 다중 스레드 안전 수 없습니다 현재 스레드에서 함수를 호출 하는 경우 setlocale 이 함수를 실행 하는 동안 하는 mbstate 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" );
    }
}
  

해당 .NET Framework 항목

해당 사항 없음. 표준 C 함수를 호출할 수 있습니다 PInvoke. 자세한 내용은 플랫폼 호출 예제.

요구 사항

루틴

필수 헤더

wcsrtombs

<wchar.h>

참고 항목

참조

데이터 변환

로캘

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

wcrtomb

wcrtomb_s

wctomb, _wctomb_l

wcstombs, _wcstombs_l

mbsinit