std:: mbsrtowcs
|
헤더 파일에 정의됨
<cwchar>
|
||
|
std::
size_t
mbsrtowcs
(
wchar_t
*
dst,
const
char
**
src,
|
||
* ps 로 기술된 변환 상태에서 시작하는 널 종료 멀티바이트 문자 시퀀스를 * src 가 가리키는 첫 번째 요소부터 시작하는 배열에서 와이드 문자 표현으로 변환합니다. dst 가 null이 아닌 경우, 변환된 문자들은 dst 가 가리키는 wchar_t 배열의 연속된 요소들에 저장됩니다. 최대 len 개의 와이드 문자만 목적 배열에 기록됩니다.
각 멀티바이트 문자는 std::mbrtowc 호출처럼 변환됩니다. 변환은 다음과 같은 경우 중지됩니다:
-
멀티바이트 널 문자가 변환되어 저장되었습니다.
src
가 널 포인터로 설정되고
*ps가 초기 시프트 상태를 나타냅니다. - (현재 C 로캘에 따라) 유효하지 않은 멀티바이트 문자를 발견했습니다. src 가 변환되지 않은 첫 번째 멀티바이트 문자의 시작 부분을 가리키도록 설정됩니다.
- 저장될 다음 와이드 문자가 len 을 초과할 경우입니다. src 가 변환되지 않은 첫 번째 멀티바이트 문자의 시작 부분을 가리키도록 설정됩니다. 이 조건은 dst 가 널 포인터인 경우 검사되지 않습니다.
목차 |
매개변수
| dst | - | 결과가 저장될 와이드 문자 배열에 대한 포인터 |
| src | - | 널 종료 멀티바이트 문자열의 첫 번째 요소에 대한 포인터의 포인터 |
| len | - | dst가 가리키는 배열에서 사용 가능한 와이드 문자 수 |
| ps | - | 변환 상태 객체에 대한 포인터 |
반환값
성공 시, 널 종료 문자 L ' \0 ' 를 제외하고 문자 배열에 기록된 와이드 문자 수를 반환합니다. dst 가 널 포인터인 경우, 무제한 길이가 주어졌을 때 기록되었을 와이드 문자 수를 반환합니다.
변환 오류 시(잘못된 멀티바이트 문자가 발견된 경우), static_cast < std:: size_t > ( - 1 ) 를 반환하며, EILSEQ 를 errno 에 저장하고, * ps 를 지정되지 않은 상태로 둡니다.
참고 사항
이 함수는 src 포인터를 변환된 멀티바이트 문자열의 끝으로 이동시킵니다. 이는 dst 가 null 포인터인 경우에는 발생하지 않습니다.
예제
#include <clocale> #include <cwchar> #include <iostream> #include <vector> void print_as_wide(const char* mbstr) { std::mbstate_t state = std::mbstate_t(); std::size_t len = 1 + std::mbsrtowcs(nullptr, &mbstr, 0, &state); std::vector<wchar_t> wstr(len); std::mbsrtowcs(&wstr[0], &mbstr, wstr.size(), &state); std::wcout << "Wide string: " << &wstr[0] << '\n' << "The length, including '\\0': " << wstr.size() << '\n'; } int main() { std::setlocale(LC_ALL, "en_US.utf8"); const char* mbstr = "z\u00df\u6c34\U0001f34c"; // or u8"zß水🍌" print_as_wide(mbstr); }
출력:
Wide string: zß水🍌 The length, including '\0': 5
참고 항목
|
주어진 상태에서 다음 멀티바이트 문자를 와이드 문자로 변환
(함수) |
|
|
주어진 상태에서 와이드 문자열을 좁은 멀티바이트 문자열로 변환
(함수) |
|
|
[virtual]
|
파일에서 읽을 때와 같이
ExternT
를
InternT
로 문자열 변환
(
std::codecvt<InternT,ExternT,StateT>
의 가상 protected 멤버 함수)
|
|
C documentation
for
mbsrtowcs
|
|