- cstring[meta header]
- std[meta namespace]
- function[meta id-type]
namespace std {
char* strtok(char* s1, const char* s2);
}文字列を、区切り文字を使ってトークンに分割する。
一連のstrtok呼び出しによって、s1が指す文字列を、s2が指す文字列に含まれる文字を区切りとしたトークンに分割する。
- 最初の呼び出しでは、
s1に分割対象の文字列を渡す。この関数は、分割対象文字列の先頭からたどって最初のトークンを検索し、そのトークンの直後にある区切り文字をヌル文字で上書きしてトークンを終端したうえで、トークンの先頭を指すポインタを返す。 - 2回目以降の呼び出しでは、
s1にヌルポインタを渡す。この関数は、内部に保持した位置から続きのトークンを検索する。
s2が指す区切り文字集合は、呼び出しごとに異なってもよい。
トークンが見つかった場合、そのトークンの先頭を指すポインタを返す。トークンが残っていない場合、ヌルポインタを返す。
- この関数は内部に状態を保持するため、フリースタンディング処理系では提供されない。
- この関数は内部の静的な状態を使用するため、スレッドセーフではない。
- この関数は引数の文字列を書き換える。
#include <cstring>
#include <iostream>
int main()
{
char s[] = "a,b,c";
// ','を区切り文字としてトークンに分割する
for (char* t = std::strtok(s, ","); t != nullptr; t = std::strtok(nullptr, ",")) {
std::cout << t << std::endl;
}
}- std::strtok[color ff0000]
a
b
c
- C++98
- P2937R0 Freestanding: Remove
strtok- C++26で、内部状態を持つ
strtokはフリースタンディング処理系では提供されないことが整理された
- C++26で、内部状態を持つ