函式
<cwchar>

mbrtowc

size_t mbrtowc (wchar_t* pwc, const char* pmb, size_t max, mbstate_t* ps);
將多位元組序列轉換為寬字元
pmb 指向的多位元組字元被轉換為wchar_t型別的值,並存儲在 pwc 指向的位置。函式返回多位元組字元的位元組長度。

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

如果 pmb 指向空字元,則函式會重置移位狀態,並在將寬空字元儲存到 pwc 後返回零。

使用空指標作為 pmb 呼叫該函式也會重置移位狀態,忽略引數 pwcmax(沒有字元儲存在 pwc 處)。

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

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

引數

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

返回值

pmb 中用於產生寬字元的位元組數。

如果這是寬空字元,或者如果 pmb 是空指標,函式返回零(在第一種情況下,寬空字元儲存在 pwc 處)。

如果 pmb 的前 max 個字元構成一個不完整(但可能有效)的多位元組字元,函式返回(size_t)-2(沒有值儲存在 pwc 處)。

否則,如果 pmb 指向的字元不構成一個有效的多位元組字元(或其開頭部分),函式返回(size_t)-1並設定 errnoEILSEQ(沒有值儲存在 pwc 處)。

請注意,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
/* mbrtowc example */
#include <wchar.h>

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

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

  while (max>0) {
    length = mbrtowc(&dest,pt,max,&mbs);
    if ((length==0)||(length>max)) break;
    wprintf (L"[%lc]",dest);
    pt+=length; max-=length;
  }
}

int main()
{
  const char str [] = "mbrtowc example";

  printbuffer (str,sizeof(str));

  return 0;
}

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

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

輸出

[m][b][r][t][o][w][c][ ][e][x][a][m][p][l][e]


另見