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
에 포함된 제한을 초과할 때까지 각 문자에 대해 계속됩니다. wcsrtombs
는 count
가 나올 때나 그 전에 와이드 문자 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