函式
<cstdlib>

mblen

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

mblen 有自己的內部移位狀態,該狀態僅由對該函式的呼叫按需修改。使用空指標作為 pmb 呼叫該函式會重置狀態(並返回多位元組字元是否與狀態相關)。

此函式的行為取決於所選 C localeLC_CTYPE 類別。

引數

pmb
指向多位元組字元第一個位元組的指標。
或者,可以使用空指標呼叫該函式,在這種情況下,該函式將其內部移位狀態重置為初始值,並返回多位元組字元編碼是否與狀態相關。
max
考慮 pmb 以構成多位元組字元的最大位元組數。
無論如何,最多檢查 MB_CUR_MAX 個字元。
size_t 是一個無符號整數型別。

返回值

如果作為 pmb 傳遞的引數不是空指標,並且它構成了一個有效多位元組字元且不是終止空字元,則返回指向的字元的大小(以位元組為單位)。如果它是終止空字元,則函式返回零;如果它們未構成有效多位元組字元,則返回 -1

如果作為 pmb 傳遞的引數是空指標,則如果多位元組字元編碼與狀態相關,該函式返回一個非零值,否則返回零。

示例

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>      /* printf */
#include <stdlib.h>     /* mblen, mbtowc, wchar_t(C) */

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;
}

printbuffer 逐個字元地列印多位元組字串。

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

輸出

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


資料競爭

該函式訪問由 pmb 指向的陣列。
該函式還訪問和修改內部狀態物件,這可能導致對該函式的併發呼叫發生資料爭用(有關可能使用外部狀態物件的替代方法,請參閱 mbrlen)。
併發地更改 locale 設定也可能引入資料競爭。

異常 (C++)

無丟擲保證:此函式不會丟擲異常。

如果 pmb 既不是空指標也不是指向足夠長的陣列的指標(如上所述),則會導致未定義行為

另見