The mbrlen() function is defined in <cwchar> header file.
mbrlen() prototype
size_t mbrlen( const char* s, size_t n, mbstate_t* ps);
The mbrlen() function examines the string whose first byte is pointed to by s and determines its size in bytes for the current conversion state ps. At most n bytes in s is examined.
mbrlen() Parameters
- s: Pointer to the first byte of multibyte string to examine.
- n: MAximum number of bytes in s to examine.
- ps: Pointer to mbstate_t object that defines a conversion state.
mbrlen() Return value
The mbrlen() function returns:
- The number of bytes that complete a valid multibyte character.
- 0 if s points to null character.
- -1 is encoding error occurs.
- -2 if the next n bytes doesn't represent a complete multibyte character.
Example: How mbrlen() function works?
#include <cwchar>
#include <clocale>
#include <iostream>
using namespace std;
void test_mbrlen(const char *s, size_t n)
{
mbstate_t ps = mbstate_t();
int retVal = mbrlen(s, n, &ps);
if (retVal == -2)
cout << "Next " << n << " byte(s) doesn't represent a complete multibyte character" << endl;
else if (retVal == -1)
cout << "Next " << n << " byte(s) doesn't represent a valid multibyte character" << endl;
else
cout << "Next " << n << " byte(s) of " << s << " holds " << retVal << " byof multibyte character" << endl;
}
int main()
{
setlocale(LC_ALL, "en_US.utf8");
char str[] = "\u00b5";
test_mbrlen(str, 1);
test_mbrlen(str, 5);
return 0;
}
When you run the program, the output will be:
Next 1 byte(s) doesn't represent a complete multibyte character Next 5 byte(s) of µ holds 2 bytes of multibyte character