std::mbsrtowcs
Defined in header <cwchar> | ||
---|---|---|
std::size_t mbsrtowcs( wchar_t* dst,
const char** src,
std::size_t len,
std::mbstate_t* ps );
|
Converts a null-terminated multibyte character sequence, which begins in the conversion state described by *ps
, from the array whose first element is pointed to by *src
to its wide character representation. If dst
is not null, converted characters are stored in the successive elements of the wchar_t array pointed to by dst
. No more than len
wide characters are written to the destination array.
Each multibyte character is converted as if by a call to std::mbrtowc
. The conversion stops if:
- The multibyte null character was converted and stored.
src
is set toNULL
and*ps
represents the initial shift state. - An invalid multibyte character (according to the current C locale) was encountered.
src
is set to point at the beginning of the first unconverted multibyte character. - the next wide character to be stored would exceed
len
.src
is set to point at the beginning of the first unconverted multibyte character. This condition is not checked ifdst==NULL
.
Parameters
dst | - | pointer to wide character array where the results will be stored |
src | - | pointer to pointer to the first element of a null-terminated multibyte string |
len | - | number of wide characters available in the array pointed to by dst |
ps | - | pointer to the conversion state object |
Return value
On success, returns the number of wide characters, excluding the terminating L'\0'
, written to the character array. If dst==NULL
, returns the number of wide characters that would have been written given unlimited length.
On conversion error (if invalid multibyte character was encountered), returns static_cast<std::size_t>(-1)
, stores EILSEQ
in errno
, and leaves *ps
in unspecified state.
Notes
This function moves the src
pointer to the end of the converted multibyte string. This doesn't happen if dst==NULL
.
Example
#include <iostream>
#include <vector>
#include <clocale>
#include <cwchar>
void print_as_wide(const char* mbstr)
{
std::mbstate_t state = std::mbstate_t();
std::size_t len = 1 + std::mbsrtowcs(NULL, &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 = u8"z\u00df\u6c34\U0001f34c"; // or u8"zß水????"
print_as_wide(mbstr);
}
Output:
Wide string: zß水???? The length, including '\0': 5
See also
converts the next multibyte character to wide character, given state (function) |
|
converts a wide string to narrow multibyte character string, given state (function) |
|
[virtual] | converts a string from externT to internT, such as when reading from file (virtual protected member function of std::codecvt<InternT,ExternT,State> ) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/string/multibyte/mbsrtowcs