std::wcsrtombs
cppreference.com
<tbody>
</tbody>
std::size_t wcsrtombs( char* dst, const wchar_t** src, std::size_t len, std::mbstate_t* ps ); |
||
, *src, , , *ps. dst , , dst. len .
, std::wcrtomb. , :
- .
src,*ps. -
wchar_t, C.src. - , ,
len.src. ,dst.
| dst | , | |
| src | , | |
| len | , , dst | |
| ps |
( , '\0'), , dst. 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 << " : " << &mbstr[0] << '\n'
<< ", '\\0': " << mbstr.size() << '\n';
}
int main()
{
std::setlocale(LC_ALL, "en_US.utf8");
// UTF-8
const wchar_t* wstr = L"z\u00df\u6c34\U0001d10b"; // L"z"
print_wide(wstr);
}
:
: z
, '\0': 11
| () | |
| () | |
[virtual] |
internT externT, , (virtual protected std::codecvt -)
|
C wcsrtombs
| |