函式
<cwchar>

mbrlen

size_t mbrlen (const char* pmb, size_t max, mbstate_t* ps);
獲取多位元組字元的長度
返回由pmb指向的多位元組字元的大小,最多檢查max個位元組。

該函式使用(並更新)由 ps 描述的轉換狀態。如果 ps 是一個空指標,該函式使用其自己的內部轉換狀態,該狀態僅在呼叫此函式時根據需要進行更改。

pmb為null指標時呼叫該函式會重置移位狀態(並忽略引數max)。

此函式的行為取決於所選LC_CTYPEC locale 的類別。

這是mblen<cstdlib>)的可重入版本。

引數

pmb
指向多位元組字元第一個位元組的指標。
或者,可以使用空指標呼叫該函式,在這種情況下,函式將轉換狀態(ps 或其內部狀態)重置為初始狀態並返回零。
max
要檢查的最大位元組數。
宏常量 MB_CUR_MAX 定義了在當前區域設定下,一個多位元組字元可以包含的最大位元組數。
size_t 是一個無符號整數型別。
ps
指向一個定義轉換狀態的 mbstate_t 物件的指標。

返回值

如果pmb指向空字元,或者pmb是空指標,則函式返回零。

否則,如果pmb指向的最多max個字元組成一個有效多位元組字元,則函式返回該多位元組字元的大小(以位元組為單位)。

否則,如果最多max個字元不能組成一個有效多位元組字元,則函式返回(size_t)-1並設定 errnoEILSEQ.

否則,如果max個字元組成一個不完整的(但可能是有效的)多位元組字元,則函式返回(size_t)-2.

請注意,size_t 是一個無符號整型型別,因此可能返回的值中沒有一個是小於零的。

示例

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
30
31
32
/* mbrlen example */
#include <stdio.h>
#include <string.h>
#include <wchar.h>

void splitmb (const char* pt, size_t max)
{
  size_t length;
  wchar_t dest;
  mbstate_t mbs;
  int i;

  mbrlen (NULL,0,&mbs);  /* initialize state */

  while (max>0) {
    length = mbrlen (pt, max, &mbs);
    if ((length==0)||(length>max)) break;
    putchar ('[');
    for (i=0; i<length; ++i) putchar (*pt++);
    putchar (']');
    max-=length;
  }
}

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

  splitmb (str,sizeof(str));

  return 0;
}

函式splitmb將多位元組序列分割成構成每個字元的位元組組。

示例在"C"區域設定中使用了一個簡單的字串,但該函式支援多位元組字串的區域設定。

輸出

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


另見