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