std::mbrlen
cppreference.com
<tbody>
</tbody>
std::size_t mbrlen( const char* s, std::size_t n, std::mbstate_t* ps); |
||
, s, ps.
std::mbrtowc(nullptr, s, n, ps ? ps : &internal) internal std::mbstate_t, , ps .
| s | ||
| n | s, | |
| ps | , |
0, n .
( 1 n), .
(size_t) - 1, .
(size_t) - 2, n , n.
#include <clocale>
#include <cwchar>
#include <iostream>
#include <string>
int main()
{
// mbrlen() UTF-8
std::setlocale(LC_ALL, "en_US.utf8");
// UTF-8
std::string str = ""; // u8"\u6c34" "\xe6\xb0\xb4"
std::mbstate_t mb = std::mbstate_t();
int len1 = std::mbrlen(&str[0], 1, &mb);
if (len1 == -2)
std::cout << " 1 " << str
<< " (mbrlen -2)\n";
int len2 = std::mbrlen(&str[1], str.size() - 1, &mb);
std::cout << " " << str.size() - 1 << " " << str
<< " " << len2 << " \n";
std::cout << " mbrlen() " << str
<< ", "
<< (int)mbrlen(&str[1], str.size(), &mb) << '\n';
}
:
1 (mbrlen -2)
2 2
mbrlen() , -1
| () | |
| () | |
[virtual] |
externT , internT : calculates the length of the externT string that would be consumed by conversion into given internT buffer (virtual protected std::codecvt -)
|
C mbrlen
| |