【C++Builder】C ランタイムライブラリリファレンス (wchar.h)

# 多バイト文字及びワイド文字拡張ユーティリティ (Wide Character)

| ヘッダ<br>ファイル | [wchar.h](https://docwiki.embarcadero.com/RADStudio/ja/Wchar.h%EF%BC%9A%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9) |
|:---|:---|
| 規格 | C95 |
| 概要 | ワイド文字の入出力に有用な幾つかの関数を宣言する。ワイド文字の入出力関数は、プログラムの内部的な基本単位がワイド文字であることを除いて、[stdio.h](https://qiita.com/ht_deko/items/8c0efe7a0301b0a457e5) で規定しているほとんどの関数と類似する機能を提供する。|

## プラグマ

## 型

| 名前 | 機能 |
|:---|:---|
| mbstate_t | マルチバイト文字とワイド文字間の変換状態を表す型です。 |
| wint_t | wchar_t 型の値と WEOF を格納できる型です。 |
| (size_t) | [sizeof()](https://docwiki.embarcadero.com/RADStudio/ja/Sizeof) が返す符号なし整数型です。 |
| (tm) | 時間を要素に分解して定義する構造体です。 |
| (wchar_t) | ワイド文字を表現できる型です。 |

## マクロ

| 名前 | 機能 |
|:---|:---|
| WEOF | ワイド文字単位のファイルの終わり（EOF）に到達したことを示す wint_t 型の定数です。 |
| [(NULL)](https://docwiki.embarcadero.com/RADStudio/ja/NULL_define)        | 任意のデータオブジェクトポインタと互換性があるヌルポインタ定数です。 |
| (WCHAR_MIN) | [wchar_t](https://qiita.com/ht_deko/items/3991919f9474ad69b6e5) の下限値。 | 
| (WCHAR_MAX) | [wchar_t](https://qiita.com/ht_deko/items/3991919f9474ad69b6e5) の上限値。 | 

## 引数付きマクロ

## 関数

### 入出力 (stdio.h)

| 名前 | 機能 |
|:---|:---|
| fwide() [^1] | ストリームの入出力単位を決定します。<br>modeが0より大きい場合、ワイド文字単位とみなします。 |


同等の 1 バイト文字用関数が [stdio.h](https://qiita.com/ht_deko/items/8c0efe7a0301b0a457e5) にあります。

| 名前 | 機能 |
|:---|:---|
| [fgetwc()](https://docwiki.embarcadero.com/RADStudio/ja/Fgetc%EF%BC%8Cfgetwc)                  | ストリームから文字を取得します。 | 
| [fgetws()](https://docwiki.embarcadero.com/RADStudio/ja/Fgets%EF%BC%8Cfgetws)                  | ストリームから文字列を取得します。 | 
| [fputwc()](https://docwiki.embarcadero.com/RADStudio/ja/Fputc%EF%BC%8Cfputwc)                  | ストリームに 1 文字を出力します。 | 
| [fputws()](https://docwiki.embarcadero.com/RADStudio/ja/Fputs%EF%BC%8Cfputws)                  | ストリームに文字列を出力します。 | 
| [fwprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Fprintf%EF%BC%8Cfwprintf)            | ストリームに書式付き出力を書き込みます。 | 
| [fwscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Fscanf%EF%BC%8Cfwscanf)               | ストリームからの入力をスキャンして書式設定します。 | 
| [getwc()](https://docwiki.embarcadero.com/RADStudio/ja/Getc%EF%BC%8Cgetwc)                     | ストリームから文字を取得します。 | 
| [getwchar()](https://docwiki.embarcadero.com/RADStudio/ja/Getchar%EF%BC%8Cgetwchar)            | stdin から文字を取得します。getwc(stdin)。 | 
| [putwc()](https://docwiki.embarcadero.com/RADStudio/ja/Putc%EF%BC%8Cputwc)                     | 文字をストリームに出力します。 | 
| [putwchar()](https://docwiki.embarcadero.com/RADStudio/ja/Putchar%EF%BC%8Cputwchar)            | 文字を stdout に出力します。putwc(c, stdout)。 | 
| [swprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Sprintf%EF%BC%8Cswprintf)            | 文字列に書式付き出力を書き込みます。 | 
| [swscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Sscanf%EF%BC%8Cswscanf)               | 文字列からの入力をスキャンして書式設定します。 | 
| [ungetwc()](https://docwiki.embarcadero.com/RADStudio/ja/Ungetc%EF%BC%8Cungetwc)               | 入力ストリームに 1 文字を戻します。 | 
| [vfwprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vfprintf%EF%BC%8Cvfwprintf)         | ストリームに書式付き出力を書き込みます。 | 
| [vfwprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vfprintf%EF%BC%8Cvfwprintf)         | ストリームに書式付き出力を書き込みます。 | 
| vfwscanf() [^1]                       | ストリームからの入力をスキャンして書式設定します。 | 
| [vswprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vsprintf%EF%BC%8Cvswprintf)         | 文字列に書式付き出力を書き込みます。 | 
| vswscanf() [^1]                        | ストリームからの入力をスキャンして書式設定します。 | 
| [vwprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vprintf%EF%BC%8Cvwprintf)            | stdout に書式付き出力を書き込みます。 | 
| vwscanf() [^1]                         | stdin からの入力をスキャンして書式設定します。 | 
| [wprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Printf%E3%80%81wprintf)               | 書式付き出力を stdout に書き込みます。 | 
| [wscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Scanf,_wscanf)                         | stdin ストリームからの入力を、スキャンおよび書式設定します。 | 


### wprintf() と wscanf()

wprintf() 系と wscanf() 系の分類です。

| 接頭 | 対象 | wprintf() | vwprintf() | wscanf() | vwscanf() |
|:---:|:---|:---|:---|:---|:---|
|     | 標準入出力 | [wprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Printf%E3%80%81wprintf)   | [vwprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vprintf%EF%BC%8Cvwprintf)    |  [wscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Scanf,_wscanf)   | vwscanf() [^1] |
| f   | ストリーム | [fwprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Fprintf%EF%BC%8Cfwprintf)  | [vfwprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vfprintf%EF%BC%8Cvfwprintf) |  [fwscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Fscanf%EF%BC%8Cfwscanf)   | vfwscanf() [^1] |
| s   | 文字列 | [swprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Sprintf%EF%BC%8Cswprintf)  | [vswprintf()](https://docwiki.embarcadero.com/RADStudio/ja/Vsprintf%EF%BC%8Cvswprintf)  |  [swscanf()](https://docwiki.embarcadero.com/RADStudio/ja/Sscanf%EF%BC%8Cswscanf)  | vswscanf() [^1] |

                                                        
:::note
プレフィックス v を持つ wprintf() 系関数や wscanf() 系関数は、引数リストではなく引数リストへのポインタを受け取ります。[可変個数引数](https://qiita.com/ht_deko/items/f275d5da1fcd62d56e93)を利用する関数の中で利用されます。
:::

### 文字列数値変換 (stdlib.h)

同等の 1 バイト文字用関数が [stdlib.h](https://qiita.com/ht_deko/items/6f274b40c331e22fc884) にあります。str~() のワイド文字版です。

| long | unsigned<br>long | long long | unsigned<br>long long | 機能 |
|:---|:---|:---|:---|:---|
| [wcstol()](https://docwiki.embarcadero.com/RADStudio/ja/Strtol%EF%BC%8Cwcstol)   | [wcstoul()](https://docwiki.embarcadero.com/RADStudio/ja/Strtoul%EF%BC%8Cwcstoul)  | wcstoll() [^1] | wcstoull() [^1] | ワイド文字列を指定された基数で<br>整数型の値に変換します。|

| double | float | long double | 機能 |
|:---|:---|:---|:---|
| [wcstod()](https://docwiki.embarcadero.com/RADStudio/ja/Strtod%EF%BC%8C_strtold%EF%BC%8Cwcstod%EF%BC%8C_wcstold)   | wcstof() [^1]  | [wcstold()](https://docwiki.embarcadero.com/RADStudio/ja/Strtod%EF%BC%8C_strtold%EF%BC%8Cwcstod%EF%BC%8C_wcstold) [^1] | ワイド文字列を実数型の値に変換します。 |

### マルチバイト文字・ワイド文字操作 (stdlib.h)

| 名前 | 機能 |
|:---|:---|
| btowc()   | 指定された文字のワイド文字表現を返します。 |
| mbsinit()   | mbstate_t の状態を調べます。 |
| wctob()   | 指定されたワイド文字の 1 バイト表現を返します。 |

同等の 1 バイト文字用関数が [stdlib.h](https://qiita.com/ht_deko/items/6f274b40c331e22fc884) にあります。

| 名前 | 機能 |
|:---|:---|
| mbrlen()    | マルチバイト文字の長さを判定します。 |
| mbrstowcs() | マルチバイト文字列を mbstate_t に変換します。 |
| mbrtowc()   | マルチバイト文字を mbstate_t コードに変換します。 |
| wcrstombs() | mbstate_t をマルチバイト文字列に変換します。 |
| wcrtomb()   | mbstate_t コードをマルチバイト文字に変換します。 |

### メモリ (string.h)

同等の 1 バイト文字用関数が [string.h](https://qiita.com/ht_deko/items/b32916d138013d504cf4) にあります。

| 名前 | 機能 |
|:---|:---|
| [wmemchr()](https://docwiki.embarcadero.com/RADStudio/ja/Memchr%EF%BC%8C_wmemchr) | n バイト内でワイド文字 c を検索します。 |
| wmemcmp() | 2 つのブロックをちょうど n バイトまで比較します。 |
| wmemcpy() | n バイトのブロックをコピーします。 |
| wmemmove() | n バイトのブロックをコピーします。 |
| [wmemset()](https://docwiki.embarcadero.com/RADStudio/ja/Memset%EF%BC%8C_wmemset) | n バイトのメモリブロックをバイト c に設定します。 |

### 文字列 (string.h)

同等の 1 バイト文字用関数が [string.h](https://qiita.com/ht_deko/items/b32916d138013d504cf4) にあります。str~() のワイド文字版です。

| 名前 | 機能 |
|:---|:---|
| [wcscat()](https://docwiki.embarcadero.com/RADStudio/ja/Strcat%EF%BC%8C_mbscat%EF%BC%8Cwcscat) | ワイド文字列を別のワイド文字列に追加します。 |
| [wcschr()](https://docwiki.embarcadero.com/RADStudio/ja/Strchr%EF%BC%8C_mbschr%EF%BC%8Cwcschr) | ワイド文字列をスキャンして，指定された文字が最初に出現する箇所を検索します。 |
| [wcscmp()](https://docwiki.embarcadero.com/RADStudio/ja/Strcmp,_mbscmp,_wcscmp) | ワイド文字列を別のワイド文字列と比較します。 |
| [wcscoll()](https://docwiki.embarcadero.com/RADStudio/ja/Strcoll%EF%BC%8C_stricoll%EF%BC%8C_mbscoll%EF%BC%8C_mbsicoll%EF%BC%8Cwcscoll%EF%BC%8C_wcsicoll) | 2 つのワイド文字列を比較します。 |
| [wcscpy()](https://docwiki.embarcadero.com/RADStudio/ja/Strcpy) | ワイド文字列を別のワイド文字列にコピーします。 |
| [wcscspn()](https://docwiki.embarcadero.com/RADStudio/ja/Strcspn%EF%BC%8C_mbscspn%EF%BC%8Cwcscspn) | ワイド文字列をスキャンして、指定されたワイド文字列内の文字をまったく含まない先頭部分を検索します。 |
| [wcserror()](https://docwiki.embarcadero.com/RADStudio/ja/Strerror) | エラーメッセージワイド文字列へのポインタを返します。 |
| [wcslen()](https://docwiki.embarcadero.com/RADStudio/ja/Strlen%EF%BC%8C_mbslen%EF%BC%8Cwcslen%EF%BC%8C_mbstrlen) | ワイド文字列の長さを計算します。 |
| [wcsncat()](https://docwiki.embarcadero.com/RADStudio/ja/Strncat) | 一方のワイド文字列の一部をもう一方のワイド文字列に付加します。 |
| [wcsncmp()](https://docwiki.embarcadero.com/RADStudio/ja/Strncmp%EF%BC%8C_mbsncmp%EF%BC%8Cwcsncmp) | ワイド文字列の一部を別のワイド文字列の一部と比較します。 |
| [wcsncpy()](https://docwiki.embarcadero.com/RADStudio/ja/Strncpy%E3%80%81mbsncpy%E3%80%81wcsncpy) | ワイド文字列から別のワイド文字列に指定されたバイト数をコピーします。必要であれば、切り捨てまたはパディングを行います。 |
| [wcspbrk()](https://docwiki.embarcadero.com/RADStudio/ja/Strpbrk%EF%BC%8C_mbspbrk%EF%BC%8Cwcspbrk) | ワイド文字列をスキャンして、指定されたワイド文字列内のいずれかの文字が最初に出現する箇所を検索します。 |
| [wcsrchr()](https://docwiki.embarcadero.com/RADStudio/ja/Strrchr%EF%BC%8C_mbsrchr%EF%BC%8Cwcsrchr) | ワイド文字列をスキャンして、指定された文字が最後に出現する箇所を検索します。 |
| [wcsspn()](https://docwiki.embarcadero.com/RADStudio/ja/Strspn%EF%BC%8C_mbsspn%EF%BC%8Cwcsspn) | ワイド文字列をスキャンして、指定されたワイド文字列内の文字からなる先頭部分を検索します。 |
| [wcsstr()](https://docwiki.embarcadero.com/RADStudio/ja/Strstr%EF%BC%8C_mbsstr%EF%BC%8Cwcsstr) | ワイド文字列をスキャンして、指定された部分ワイド文字列が出現する箇所を検索します。 |
| [wcstok()](https://docwiki.embarcadero.com/RADStudio/ja/Strtok%EF%BC%8C_mbstok%EF%BC%8Cwcstok) | ワイド文字列からトークンを検索します。トークンは、2 番めのワイド文字列で定義される区切り文字によって区切られます。 |
| [wcsxfrm()](https://docwiki.embarcadero.com/RADStudio/ja/Strxfrm%EF%BC%8Cwcsxfrm) | ワイド文字列の一部を指定された照合順序のワイド文字列に変換します。 |

### 時間 (time.h)

同等の 1 バイト文字用関数が [time.h](https://qiita.com/ht_deko/items/b99d1b83abbc888e9a5f) にあります。str~() のワイド文字版です。

| 名前 | 機能 |
|:---|:---|
| [wcsftime()](https://docwiki.embarcadero.com/RADStudio/ja/Strftime,_wcsftime) | 出力する時間を書式設定します。 |

## 資料

 - [C 言語 / 標準ライブラリ / wchar.h (Wikibooks)](https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/wchar.h)
 - [z/OS C/C++ ランタイム・ライブラリー・リファレンス wchar.h &#x2014; ISO/C マルチバイト・サポート拡張 (IBM)](https://www.ibm.com/docs/ja/zos/3.1.0?topic=files-wcharh-isoc-multibyte-support-extensions)
 - [C 言語の標準ヘッダ一覧 wchar.h (C 言語)](http://www.c-lang.org/detail/wchar_h.html)

---

[&#x21E6; インデックスへ](https://qiita.com/ht_deko/items/31f4b37daa97270e2416)

[^1]: C99 で追加された。