函式
<cwchar>

wcsrtombs

size_t wcsrtombs (char* dest, const wchar_t** src, size_t max, mbstate_t* ps);
將寬字元字串轉換為多位元組字串
該函式將由src指向的C寬字串中最多max個字元轉換為它們的多位元組序列等效項,並將它們儲存在dest指向的緩衝區中,如果遇到終止的空寬字元,則停止(它也會被轉換並存儲,但其長度不計入函式返回的長度)。

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

如果函式轉換了整個C寬字串(直到遇到空寬字元),並且dest不是空指標,則函式會將src設定為空指標值,並且轉換後的狀態保證為初始轉換狀態。

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

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

引數

dest
指向一個char足夠長的元素,可以儲存最多max個位元組的C字串。
如果這是一個空指標,函式不會儲存結果序列,但仍會計算儲存src轉換所需的位元組數(在這種情況下,引數max將被忽略)。
src
指向要轉換的C寬字串的指標(一個間接指標)。
如果轉換提前停止,此值將被函式修改,指向最後一個被轉換的寬字元之後;如果函式到達終止的空字元,則指向空指標。
max
寫入dest的最大位元組數。
size_t 是一個無符號整數型別。
ps
指向一個定義轉換狀態的 mbstate_t 物件的指標。

返回值

寫入dest的位元組數(不包括最終的終止空字元)。

如果在轉換過程中,函式遇到一個沒有有效多位元組序列等效項的寬字元,函式會將errno設定為EILSEQ並返回(size_t)-1src將指向第一個無法轉換的字元。

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

示例

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

int main() {
  const wchar_t str[] = L"wcstombs example";
  const wchar_t * p;
  mbstate_t mbs;
  char buffer[32];
  int ret;

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

  printf ("wchar_t string: %ls \n",str);

  p = str;
  ret = wcsrtombs ( buffer, &p, sizeof(buffer), &mbs );
  if (ret==32) buffer[31]='\0';
  if (ret) printf ("multibyte string: %s \n",buffer);

  return 0;
}

輸出

wchar_t string: wcstombs example 
multibyte string:  wcstombs example 


另見