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
매개 변수
pReturnValue
기록된 바이트 수를 반환하거나, 오류가 발생하면 -1을 반환합니다.
mbchar
멀티바이트로 변환된 결과 문자입니다.
sizeOfmbchar
mbchar
변수의 크기(바이트)입니다.
wchar
변환할 와이드 문자입니다.
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++에서는 템플릿 오버로드로 인해 이러한 함수를 간편하게 사용할 수 있습니다. 오버로드는 버퍼 길이를 자동으로 유추할 수 있으며(크기 인수를 지정할 필요가 없어짐), 기존의 비보안 함수를 보다 최신의 보안 대응 함수로 자동으로 바꿀 수 있습니다. 자세한 내용은 안전한 템플릿 오버로드를 참조하세요.
기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.
예외
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");
}
}
The corresponding wide character "Q" was converted to a the "Q" multibyte character.
요구 사항
루틴에서 반환된 값 | 필수 헤더 |
---|---|
wcrtomb_s |
<wchar.h> |