function

mblen

<cstdlib>
int mblen ( const char * pmb, size_t max );
Get length of multibyte character
Returns the size of the multibyte character pointed by pmb, examining at most max bytes.

mblen has its own internal shift state, which is altered as necessary only by calls to this function. A call to the function with a null pointer as pmb resets the state (and returns whether multibyte characters are state-dependent).

The behavior of this function depends on the LC_CTYPE category of the selected C locale.

Parameters

pmb
Pointer to the first byte of a multibyte character.
Alternativelly, the function may be called with a null pointer, in which case the function resets its internal shift state to the initial value and returns whether multibyte characters use a state-dependent encoding.
max
Maximum number of bytes to be checked for character length.
No more than MB_CUR_MAX characters are examined in any case.
size_t is an unsigned integral type.

Return Value

If the argument passed as pmb is not a null pointer, the size in bytes of the character pointed by pmb is returned when it forms a valid multibyte character and is not the terminating null character. If it is the terminating null character, the function returns zero, and in the case they do not form a valid multibyte character, -1 is returned.

If the argument passed as pmb is a null pointer, the function returns a nonzero value if multibyte character encodings are state-dependent, and zero otherwise.

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* mblen example */
#include <stdio.h>
#include <stdlib.h>

void printbuffer (const char* pt, size_t max)
{
  int length;
  wchar_t dest;

  mblen (NULL, 0);         /* reset mblen */
  mbtowc (NULL, NULL, 0);  /* reset mbtowc */

  while (max>0) {
    length = mblen (pt, max);
    if (length<1) break;
    mbtowc(&dest,pt,length);
    printf ("[%lc]",dest);
    pt+=length; max-=length;
  }
}

int main()
{
  const char str [] = "test string";

  printbuffer (str,sizeof(str));

  return 0;
}


Function printbuffer prints a multibyte string character by character.

The example uses a trivial string on the "C" locale, but locales supporting multibyte string are supported by the function.

Output:

[t][e][s][t][ ][s][t][r][i][n][g]

See also