Namespaces
Variants

std:: wcsrtombs

From cppreference.net
헤더 파일에 정의됨 <cwchar>
std:: size_t wcsrtombs ( char * dst,

const wchar_t ** src,
std:: size_t len,

std:: mbstate_t * ps ) ;

* src 가 가리키는 첫 번째 요소부터 시작하는 배열의 와이드 문자 시퀀스를, * ps 로 기술된 변환 상태에서 시작하는 좁은 멀티바이트 표현으로 변환합니다. dst 가 null이 아닌 경우, 변환된 문자들은 dst 가 가리키는 char 배열의 연속된 요소들에 저장됩니다. 최대 len 바이트까지 대상 배열에 기록됩니다.

각 문자는 마치 std::wcrtomb 호출처럼 변환됩니다. 변환은 다음과 같은 경우 중단됩니다:

  • 널 문자(null character)가 변환되어 저장되었습니다. src 는 널 포인터(null pointer)로 설정되고 * ps 는 초기 시프트 상태(initial shift state)를 나타냅니다.
  • 현재 C 로케일(locale)에서 유효한 문자에 해당하지 않는 wchar_t 가 발견되었습니다. src 는 변환되지 않은 첫 번째 와이드 문자(wide character)를 가리키도록 설정됩니다.
  • 저장될 다음 멀티바이트 문자(multibyte character)가 len 를 초과할 경우입니다. src 는 변환되지 않은 첫 번째 와이드 문자(wide character)를 가리키도록 설정됩니다. 이 조건은 dst 가 널 포인터(null pointer)인 경우에는 검사되지 않습니다.

목차

매개변수

dst - 멀티바이트 문자가 저장될 좁은 문자 배열에 대한 포인터
src - 널 종료 와이드 문자열의 첫 번째 요소에 대한 포인터의 포인터
len - dst가 가리키는 배열에서 사용 가능한 바이트 수
ps - 변환 상태 객체에 대한 포인터

반환값

성공 시, dst 가 가리키는 첫 번째 요소를 시작으로 하는 문자 배열에 기록된 바이트 수(시프트 시퀀스를 포함하지만 종료 ' \0 ' 는 제외)를 반환합니다. dst 가 널 포인터인 경우, 기록되었을 바이트 수(역시 종료 널 문자 ' \0 ' 제외)를 반환합니다.

변환 오류 시(유효하지 않은 와이드 문자를 발견한 경우), static_cast < std:: size_t > ( - 1 ) 를 반환하며, EILSEQ errno 에 저장하고, * ps 를 지정되지 않은 상태로 둡니다.

예제

#include <clocale>
#include <cwchar>
#include <iostream>
#include <string>
#include <vector>
void print_wide(const wchar_t* wstr)
{
    std::mbstate_t state = std::mbstate_t();
    std::size_t len = 1 + std::wcsrtombs(nullptr, &wstr, 0, &state);
    std::vector<char> mbstr(len);
    std::wcsrtombs(&mbstr[0], &wstr, mbstr.size(), &state);
    std::cout << "multibyte string: " << &mbstr[0] << '\n'
              << "Length, including '\\0': " << mbstr.size() << '\n';
}
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 narrow multibyte encoding
    const wchar_t* wstr = L"z\u00df\u6c34\U0001d10b"; // or L"zß水𝄋"
    print_wide(wstr);
}

출력:

multibyte string: zß水𝄋
Length, including '\0': 11

참고 항목

와이드 문자를 멀티바이트 표현으로 변환 (상태 정보 사용)
(함수)
좁은 멀티바이트 문자열을 와이드 문자열로 변환 (상태 정보 사용)
(함수)
[virtual]
InternT 에서 ExternT 로 문자열 변환 (예: 파일에 쓸 때)
( std::codecvt<InternT,ExternT,StateT> 의 가상 protected 멤버 함수)
C documentation for wcsrtombs