函式
<cwchar>

wcrtomb

size_t wcrtomb (char* pmb, wchar_t wc, mbstate_t* ps);
將寬字元轉換成多位元組序列
寬字元 wc 被翻譯成其等效的多位元組字元,並存儲在由 pmb 指向的陣列中。該函式返回由 pmb 指向的等效多位元組序列的位元組長度。

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

如果 wc 是一個空寬字元,該函式會重置移位狀態,並存儲一個空位元組,前面加上任何恢復初始移位狀態所需的移位序列。

使用空指標作為 pmb 來呼叫該函式也會重置移位狀態(並忽略引數 wc)。

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

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

引數

pmb
指向一個足以容納多位元組序列的陣列的指標。
在當前 locale 中,一個字元的多位元組序列的最大長度是 MB_CUR_MAX 位元組。

或者,該函式可以用一個空指標來呼叫,在這種情況下,函式總是將移位狀態重置為初始狀態,就像 wcL'\0' 一樣(忽略作為 wc 傳入的實際值)。
wc
型別為wchar_t.
ps
指向一個定義轉換狀態的 mbstate_t 物件的指標。

如果這是一個空指標,該函式會使用其自己的內部移位狀態,該狀態在程式啟動時初始化,並且僅透過對此函式的呼叫來改變。

返回值

pmb 處寫入的多位元組序列的大小(以位元組為單位),包括任何移位字元。

如果沒有字元對應關係,函式返回(size_t)-1並設定 errnoEILSEQ.

如果 pmb 是一個空指標,函式返回一加上恢復初始移位狀態所需的位元組數(就好像函式在內部緩衝區上操作,且 wcL'\0')。

示例

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

int main() {
  const wchar_t* pt = L"wcrtomb example";
  char buffer [MB_CUR_MAX];
  size_t length, i;
  mbstate_t mbs;

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

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

  return 0;
}

該示例列印了一個寬字元字串在使用所選 locale (在本例中是"C"locale) 轉換成的多位元組字元。

輸出

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


另見