mbsrtowcs -
マルチバイト文字列をワイド文字列に変換する
#include <wchar.h>
size_t mbsrtowcs(wchar_t *dest, const char **src,
size_t len, mbstate_t *ps);
dest が NULL でなければ、
mbsrtowcs() 関数は
マルチバイト文字列
*src を
dest
から始まるワイド文字列に
変換する。
dest
には最大で
len
文字のワイド文字が
書き込まれる。同時にシフト状態
*ps を更新する。
変換は
mbrtowc(dest, *src, n, ps)
を、この呼び出しが成功する限り繰り返し実行したのと実質的に同様である。
ここで
n
は正の数であり、繰り返しごとに
dest が 1
増加させられ、
*src
が消費したバイト数だけ増加させられる。変換は以下の三つの
いずれかの条件で停止する:
- 1.
- 不正なマルチバイト列に遭遇した。この場合には
*src は不正な
マルチバイト列を指すようにして、
(size_t) -1 を返し、 errno
に EILSEQ
を設定する。
- 2.
-
len 文字の L'\0'
以外のワイド文字を
dest
に格納した場合。
この場合は *src
は次に変換されるマルチバイト列を指すようにして、
dest
に書き込まれたワイド文字の数を返す。
- 3.
- マルチバイト文字列が終端のヌルワイド文字
('\0') まで含めて完全に
変換された場合。この時、副作用として
*ps
が初期状態に戻される。
この場合は *src には NULL
が設定され、終端のヌルワイド文字を除いて
dest
に書き込まれた文字数を返す。
dest が NULL の場合、
len
は無視され、上記と同様の変換が
行われるが、変換されたワイド文字はメモリーに書き込まれず、変換先の上限
が存在しない。
上記のどちらの場合でも、
ps が NULL ならば、
代りに
mbsrtowcs()
関数のみが使用する静的で名前のない状態が使用される。
プログラマーは
dest
に最低でも
len
ワイド文字を書き込むこ
とができる空間があることを保証しなければならない。
mbsrtowcs()
関数はワイド文字列に変換完了したワイド文字の数を返す。
終端のナルワイド文字は含まない。不正なマルチバイト列に遭遇した場合には
(size_t) -1 を返し、
errno
に
EILSEQ を設定する。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
mbsrtowcs() |
Thread safety |
MT-Unsafe race:mbsrtowcs/!ps |
POSIX.1-2001, POSIX.1-2008, C99.
mbsrtowcs()
の動作は現在のロケールの
LC_CTYPE
カテゴリーに依存している。
ps に NULL
を渡した際の動作はマルチスレッドセーフでない。
iconv(3),
mbrtowc(3),
mbsinit(3),
mbsnrtowcs(3),
mbstowcs(3)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。