namespace std {
size_t c8rtomb(char* s, char8_t c8, mbstate_t* ps);
}
概要
UTF-8文字 (char8_t) を、マルチバイト文字に変換する。
C23で<uchar.h>に追加された関数であり、C++26で<cuchar>に取り込まれた。
効果
sがヌルポインタの場合、内部バッファをbufとしてc8rtomb(buf, u8'\0', ps)の呼び出しと等価である。
sがヌルポインタでない場合、c8によって与えられた (もしくは完成した) 文字に対応するマルチバイト文字の表現に必要なバイト数を判定し、その表現をsが指す配列に格納する。c8が完全な文字を表していない場合は何も格納しない。格納されるバイト数は最大でMB_CUR_MAXである。
c8がヌル文字の場合、初期シフト状態へ戻すために必要なシフトシーケンスに続けてヌルバイトが格納される。
戻り値
配列に格納したバイト数 (シフトシーケンスを含む) を返す。
c8が有効な文字でない場合、エンコードエラーとなり、errnoにEILSEQが格納され(size_t)(-1)を返す。このとき変換状態は未規定となる。
例
#include <cuchar>
#include <print>
int main()
{
char buf[8] = {};
std::mbstate_t state{};
std::size_t r = std::c8rtomb(buf, u8'A', &state);
std::println("{} {}", r, buf);
}
出力例
1 A
バージョン
言語
- C++26
処理系
- Clang: 22 ❌
- GCC: 16.1 ❌
- Visual C++: 2026 Update 2 ❌
関連項目
mbrtoc8: マルチバイト文字を、UTF-8文字 (char8_t) に変換する
参照
- P3348R4 C++26 should refer to C23 not C17
- C++26がC23を参照するようになり、この関数が
<cuchar>に追加された
- C++26がC23を参照するようになり、この関数が