Namespaces
Variants

c8rtomb

From cppreference.net
ヘッダーで定義 <uchar.h>
size_t c8rtomb ( char * restrict s, char8_t c8, mbstate_t * restrict ps ) ;
(C23以降)

UTF-8の単一コードポイントをナローマルチバイト文字表現に変換します。

s が null ポインタではなく、かつ c8 がコードポイントの有効な UTF-8 エンコーディングの最後のコードユニットである場合、この関数はそのコードポイントのマルチバイト文字表現を格納するために必要なバイト数(シフトシーケンスを含み、現在のマルチバイト変換状態 * ps を考慮して)を決定し、マルチバイト文字表現を s が指す先頭要素の文字配列に格納し、必要に応じて * ps を更新します。この関数によって書き込まれるバイト数は最大で MB_CUR_MAX バイトです。

c8 がコードポイントの表現における最終UTF-8コードユニットでない場合、この関数は s が指す配列には書き込まず、 * ps のみが更新されます。

s がヌルポインタの場合、この呼び出しは内部バッファ buf に対する c8rtomb ( buf, u8 ' \0 ' , ps ) と等価です。

c8 がナル文字 u8 ' \0 ' である場合、初期シフト状態を復元するために必要なシフトシーケンスに続けてナルバイトが格納され、変換状態パラメータ * ps は初期シフト状態を表すように更新されます。

この関数で使用されるマルチバイトエンコーディングは、現在アクティブなCロケールによって指定されます。

目次

パラメータ

s - マルチバイト文字が格納されるナロウ文字配列へのポインタ
c8 - 変換対象のUTF-8コード単位
ps - マルチバイト文字列を解釈する際に使用される変換状態オブジェクトへのポインタ

戻り値

配列オブジェクトに格納されているバイト数(シフトシーケンスを含む)。これは c8 がコードポイントのUTF-8表現における最終コードユニットでない場合、ゼロとなる可能性があります。

c8 が無効である場合(有効なマルチバイト文字に対応する char8_t のシーケンスに寄与しない場合)、マクロ EILSEQ の値が errno に格納され、 ( size_t ) - 1 が返され、変換状態は未指定となります。

注記

c8rtomb の呼び出しにおいて、 s に対する null ポインタ引数を使用する場合、他の c8rtomb の呼び出しで s に対する null ポインタ引数を使用するものとの間でデータ競合が発生する可能性があります。

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 7.30.1.2 c8rtomb関数

関連項目

(C23)
ナローマルチバイト文字をUTF-8エンコーディングに変換する
(関数)