wcrtomb - ワイド文字 1
つをマルチバイト列に変換する
#include <wchar.h>
size_t wcrtomb(char *s, wchar_t wc, mbstate_t *ps);
この関数が主に使われるのは、
s が NULL でなく、
wc
がヌルワイド文字 (L'\0')
でない場合である。
この場合には、
wcrtomb()
関数はワイド文字
wc
をマルチバイト表
現に変換し、
s
が指す char
型の配列にこれを格納する。この関数は
シフト状態
*ps
を更新し、出力されたマルチバイト表現の長さ、すな
わち
s
に書き込まれたバイト数を返す。
別のケースとしては、
s は NULL でないが
wc
がヌルワイド文字 (L'\0')
のことがある。
この場合の
wcrtomb()
関数は、
*ps
を初期状態に戻すのに必
要なシフトシーケンスを
s が指す char
型配列に格納し、その後に
'\0'
を格納する。この関数はシフト状態
*ps
を更新し(つまり初期状態に戻
し)、シフトシーケンスの長さに
1
を加えた値を返す。この値は
s に
書き込まれたバイト数である。
三番目のケースは、
s が NULL の時である。
この場合には
wc
は無視され、関数の実際の動きとしては
wcrtomb(buf, L'\0', ps)
が返される。ここで、
buf
は内部的な無名バッファーである。
以上のいずれの場合も、
ps が NULL
ならばシフト状態は用い
られず、
wcrtomb()
関数だけが知っている静的な匿名の状態が使われる。
wcrtomb() 関数は、
s
が指すバイト列に書き込まれたバイト数、あ
るいは書き込まれたであろうバイト数を返す。
wc
を(現在のロケールに
従って)マルチバイト列で表現できなければ、
(size_t) -1 が返され、
errno に
EILSEQ
が設定される。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
wcrtomb() |
Thread safety |
MT-Unsafe race:wcrtomb/!ps |
POSIX.1-2001, POSIX.1-2008, C99.
wcrtomb()
の動作は、現在のロケールの
LC_CTYPE
カテゴリーに依存する。
ps に NULL
を渡した際の動作はマルチスレッドセーフでない。
mbsinit(3),
wcsrtombs(3)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。