GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::mbrlen(3) C++ Standard Libary std::mbrlen(3)

std::mbrlen - std::mbrlen


Defined in header <cwchar>
std::size_t mbrlen( const char* s, std::size_t n, std::mbstate_t* ps);


Determines the size, in bytes, of the remainder of the multibyte character whose
first byte is pointed to by s, given the current conversion state ps.


This function is equivalent to the call std::mbrtowc(nullptr, s, n, ps?ps:&internal)
for some hidden object internal of type std::mbstate_t, except that the expression
ps is evaluated only once.


s - pointer to an element of a multibyte character string
n - limit on the number of bytes in s that can be examined
ps - pointer to the variable holding the conversion state


0 if the next n or fewer bytes complete the null character.


The number of bytes (between 1 and n) that complete a valid multibyte character


(size_t)-1 if encoding error occurs


(size_t)-2 if the next n bytes are part of a possibly valid multibyte character,
which is still incomplete after examining all n bytes

// Run this code


#include <clocale>
#include <string>
#include <iostream>
#include <cwchar>


int main()
{
// allow mbrlen() to work with UTF-8 multibyte encoding
std::setlocale(LC_ALL, "en_US.utf8");
// UTF-8 narrow multibyte encoding
std::string str = "水"; // or u8"\u6c34" or "\xe6\xb0\xb4"
std::mbstate_t mb = std::mbstate_t();
int len1 = std::mbrlen(&str[0], 1, &mb);
if(len1 == -2) {
std::cout << "The first 1 byte of " << str
<< " is an incomplete multibyte char (mbrlen returns -2)\n";
}
int len2 = std::mbrlen(&str[1], str.size()-1, &mb);
std::cout << "The remaining " << str.size()-1 << " bytes of " << str
<< " hold " << len2 << " bytes of the multibyte character\n";
std::cout << "Attempting to call mbrlen() in the middle of " << str
<< " while in initial shift state returns "
<< (int)mbrlen(&str[1], str.size(), &mb) << '\n';


}


The first 1 byte of 水 is an incomplete multibyte char (mbrlen returns -2)
The remaining 2 bytes of 水 hold 2 bytes of the multibyte character
Attempting to call mbrlen() in the middle of 水 while in initial shift state returns -1


mbrtowc converts the next multibyte character to wide character, given state
(function)
mblen returns the number of bytes in the next multibyte character
(function)
do_length calculates the length of the externT string that would be consumed by
[virtual] conversion into given internT buffer
(virtual protected member function of std::codecvt<InternT,ExternT,State>)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.