概要
マルチバイト文字を、UTF-8文字 (char8_t) に変換する。
C23で<uchar.h>に追加された関数であり、C++26で<cuchar>に取り込まれた。
効果
sがヌルポインタの場合、mbrtoc8(nullptr, "", 1, ps)の呼び出しと等価である (このときpc8とnは無視される)。
sがヌルポインタでない場合、sが指す位置から最大nバイトを検査し、次のマルチバイト文字を完成させるのに必要なバイト数を判定する。次のマルチバイト文字が完全かつ有効であれば、対応する文字の値を決定し、pc8がヌルポインタでなければ最初の (もしくは唯一の) 文字をpc8が指すオブジェクトに格納する。
1つのマルチバイト文字が複数のchar8_tに対応する場合、後続の呼び出しでは入力を消費せずに残りの文字を順次格納する。
戻り値
変換状態に応じて、以下のうち最初に該当するものを返す。
| 戻り値 | 意味 |
|---|---|
0 |
次のnバイト以内で、ヌル文字に対応するマルチバイト文字が完成した |
1~n |
次のnバイト以内で有効なマルチバイト文字が完成した。値はその完成に要したバイト数 |
(size_t)(-3) |
前回の呼び出しの結果である次の文字が格納された (入力バイトは消費されない) |
(size_t)(-2) |
次のnバイトが不完全な (が、潜在的に有効な) マルチバイト文字に寄与し、すべてのnバイトを処理した (値は格納されない) |
(size_t)(-1) |
エンコードエラー。errnoにEILSEQが格納され、変換状態は未規定となる |
例
#include <cuchar>
#include <print>
int main()
{
const char src[] = "A";
char8_t c8;
std::mbstate_t state{};
std::size_t r = std::mbrtoc8(&c8, src, sizeof(src), &state);
std::println("{} {}", r, static_cast<int>(c8));
}
出力例
1 65
バージョン
言語
- C++26
処理系
- Clang: 22 ❌
- GCC: 16.1 ❌
- Visual C++: 2026 Update 2 ❌
関連項目
c8rtomb: UTF-8文字 (char8_t) を、マルチバイト文字に変換する
参照
- P3348R4 C++26 should refer to C23 not C17
- C++26がC23を参照するようになり、この関数が
<cuchar>に追加された
- C++26がC23を参照するようになり、この関数が