Namespaces
Variants

std:: wcstombs

From cppreference.net
헤더 파일에 정의됨 <cstdlib>
std:: size_t wcstombs ( char * dst, const wchar_t * src, std:: size_t len ) ;

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

각 문자는 std::wctomb 호출처럼 변환되지만, wctomb의 변환 상태는 영향을 받지 않습니다. 다음과 같은 경우 변환이 중지됩니다:

  • 널 문자(null character)가 변환되어 저장되었습니다.
  • 현재 C 로케일에서 유효한 문자에 해당하지 않는 wchar_t 가 발견되었습니다.
  • 저장될 다음 멀티바이트 문자가 len 을 초과할 것입니다.

목차

참고 사항

대부분의 구현에서, 이 함수는 문자열을 처리하면서 std::mbstate_t 타입의 전역 정적 객체를 갱신하므로, 두 스레드에서 동시에 호출할 수 없습니다. 이러한 경우에는 std:: wcsrtombs 를 사용해야 합니다.

POSIX는 공통 확장을 명시합니다: 만약 dst 가 널 포인터인 경우, 이 함수는 변환되었을 때 dst 에 기록될 바이트 수를 반환합니다. 유사한 동작이 std:: wcsrtombs 에 대해 표준입니다.

매개변수

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

반환값

성공 시, dst 가 가리키는 첫 번째 요소를 갖는 문자 배열에 기록된 바이트 수(시프트 시퀀스를 포함하지만 종결 ' \0 ' 는 제외)를 반환합니다.

변환 오류 시(유효하지 않은 와이드 문자를 만난 경우), static_cast < std:: size_t > ( - 1 ) 를 반환합니다.

예제

#include <clocale>
#include <cstdlib>
#include <iostream>
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ß水𝄋"
    char mbstr[11];
    std::wcstombs(mbstr, wstr, 11);
    std::cout << "multibyte string: " << mbstr << '\n';
}

출력:

multibyte string: zß水𝄋

참고 항목

와이드 문자열을 내부 상태를 고려하여 좁은 멀티바이트 문자 문자열로 변환
(함수)
좁은 멀티바이트 문자 문자열을 와이드 문자열로 변환
(함수)
[virtual]
InternT 에서 ExternT 로 문자열을 변환 (예: 파일에 쓸 때)
( std::codecvt<InternT,ExternT,StateT> 의 가상 protected 멤버 함수)
C documentation for wcstombs