다음을 통해 공유


wcsrtombs_s

와이드 문자열을 멀티 바이트 문자 문자열 표현으로 변환 합니다.버전 wcsrtombs 와 보안 기능 향상에 설명 된 대로 CRT의 보안 기능.

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

매개 변수

  • [out] pReturnValue
    문자를 변환 합니다.

  • [out] mbstr
    그 결과 대 한 버퍼의 주소는 멀티 바이트 문자 문자열 변환.

  • [out] sizeInBytes
    바이트의 크기는 mbstr 버퍼입니다.

  • [in] wcstr
    변환 하는 와이드 문자열을 가리킵니다.

  • [in] count
    최대 수에 저장 되는 바이트 수는 mbstr 버퍼 또는 _TRUNCATE.

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

반환 값

연결에 성공 하면 0, 실패 시 오류 코드입니다.

오류 조건

값을 반환 하 고errno

mbstris NULL and sizeInBytes > 0

EINVAL

wcstr가 NULL인 경우

EINVAL

대상 버퍼가 너무 작아 변환 된 문자열을 포함할 수 있습니다 (않는 한 count 입니다 _TRUNCATE. 아래의 설명 부분 참조)

ERANGE

이러한 조건 중 하나라도 발생 하는 경우 잘못 된 매개 변수가 예외에 설명 된 대로 호출 될 매개 변수 유효성 검사 .실행 계속 수 있으면 함수가 오류 코드를 반환 하 고 설정 하는 errno 는 표에 표시 된 대로.

설명

wcsrtombs_s 함수의 와이드 문자 포인터가 가리키는 문자열 변환 wcstr 가 가리키는 버퍼에 저장 된 멀티 바이트 문자에 mbstr, 포함 된 변환 상태를 사용 하 여 mbstate.이러한 조건 중 하나가 만족 될 때까지 각 문자에 대 한 변환을 계속 합니다.

  • 와이드 null 문자를 발견 했습니다.

  • 와이드 문자를 변환할 수 없습니다 발생 하는

  • 저장 된 바이트는 mbstr equals를 버퍼링 count.

항상 대상 문자열은 null로 끝나는 (오류 경우에)입니다.

경우 count 특수 값인 _TRUNCATE, 다음 wcsrtombs_s 여전히 그대로 두고 공간에 null 종결자에 대 한 대상 버퍼에 맞게 최대한 will 문자열로 변환 합니다.

경우 wcsrtombs_s 성공적으로 원본 문자열 변환 크기 (바이트)에 null 종결자를 포함 하 여 변환 된 문자열을 배치 *pReturnValue (제공 pReturnValue 수 없습니다 NULL).이런 경우에는 mbstr 인수가 NULL 및 필요한 버퍼 크기를 결정할 수 있습니다.Note that if mbstr is NULL, count is ignored.

경우 wcsrtombs_s 와이드 문자는 멀티 바이트 문자를 변환할 수 없습니다 발견-1 배치 *pReturnValue, 빈 문자열로 설정 하는 대상 버퍼, 설정 errno 에 EILSEQ, 반환 하 고 EILSEQ.

시퀀스 가리키는 경우 wcstr 및 mbstr 겹치는 동작을 wcsrtombs_s 는 정의 되지 않습니다.wcsrtombs_s현재 로캘 LC_TYPE 범주별으로 영향을 받습니다.

보안 정보보안 정보

확인 wcstr 및 mbstr 서로 중첩 되지 않습니다 및 count 올바르게 변환 하려면 와이드 문자 수를 반영 합니다.

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

C + +에서이 함수를 사용 하 여 템플릿 오버 로드에 단순화 됩니다. 오버 로드에서 버퍼 길이가 자동으로 유추할 수 있습니다 (size 인수를 지정할 필요가 없습니다) 및 해당 보안에서 이미지와 이전, 안전 하지 않은 함수가 자동으로 바꿀 수 있습니다.자세한 내용은 보안 템플릿 오버 로드를 참조하십시오.

예외

wcsrtombs_s 함수는 다중 스레드 안전 수 없습니다 현재 스레드에서 함수를 호출 하는 경우 setlocale 이 함수를 실행 하는 동안 하는 mbstate null입니다.

예제

// crt_wcsrtombs_s.cpp
// 
// 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

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

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

    err = wcsrtombs_s(&countConverted, mbString, MB_BUFFER_SIZE,
                      &wcsIndirectString, MB_BUFFER_SIZE, &mbstate);
    if (err == EILSEQ)
    {
        printf( "An encoding error was detected in the string.\n" );
    }
    else 
    {
        printf( "The string was successfully converted.\n" );
    }
}
  

해당 .NET Framework 항목

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

요구 사항

루틴

필수 헤더

wcsrtombs_s

<wchar.h>

참고 항목

참조

데이터 변환

로캘

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

wcrtomb

wcrtomb_s

wctomb, _wctomb_l

wcstombs, _wcstombs_l

mbsinit