namespace std {
wchar_t* wcstok(wchar_t* s1, const wchar_t* s2, wchar_t** ptr);
}
概要
ワイド文字列を、区切り文字によって分割する。
効果
最初の呼び出しではs1に対象の文字列を渡し、2回目以降はs1にヌルポインタを渡すことで、続きのトークンを取り出す。s2には区切り文字の集合を指定する。ptrには、呼び出しをまたいで状態を保持するためのwchar_t*オブジェクトのアドレスを渡す。
戻り値
取り出したトークンの先頭を指すポインタを返す。取り出せるトークンがない場合はヌルポインタを返す。
備考
- 対象の文字列は書き換えられる(区切り文字がヌル文字に置き換えられる)ため、文字列リテラルを渡してはならない
- C標準ライブラリの
wcstokと異なり、C++では状態をptrで受け取るため、複数のスレッドから安全に使用できる - この関数は、C++26からフリースタンディング処理系でも使用できる
例
#include <cwchar>
#include <iostream>
int main()
{
wchar_t str[] = L"a,b,c";
wchar_t* ptr = nullptr;
for (wchar_t* token = std::wcstok(str, L",", &ptr);
token != nullptr;
token = std::wcstok(nullptr, L",", &ptr)) {
std::wcout << token << std::endl;
}
}
出力
a
b
c
バージョン
言語
- C++98
関連項目
std::strtok(): マルチバイト文字列版
参照
- P2338R4 Freestanding Library: Character primitives and the C library
- C++26で、この関数がフリースタンディング処理系で使用可能になった