string text = "token test string";
char *word = nullptr; // good to initialize all variables
char *str = nullptr;
int i=0,j=0;
word = strtok(& text[0], " "); // <-- this is not correct(1)
while(word!=NULL)
{
cout << word << " : " << text.length() << endl;
word = strtok(NULL, " ");
str[j]=word; // Here Error
j++;
}
(1) strtok() ランタイム関数は、入力として std::string を使用せず、char[] 配列を使用します - 実際、パラメーターを変更します。std::string をトークン化する代わりに、別のアプローチを使用する必要があります (これはより C++sh です)。
例えば
istringstream iss(text);
vector<string> tokens;
copy(istream_iterator<string>(iss),
istream_iterator<string>(),
back_inserter<vector<string> >(tokens));
これで、ベクトル「トークン」にすべての単語が含まれるようになりました
代替。テキストを配列として宣言する
char text[] = "token test string";
word = strtok(text, " "); // <-- this is not correct(1)
while(word!=NULL)
{
cout << word << " : " << strlen(text) << endl;
if ( (word = strtok(NULL, " ")) != NULL )
{
str[j++] = strdup(word); // make a copy allocated on heap
}
}