为什么strtok不适用于stringstream?

Ita*_*Gal 1 c++ split stringstream strtok

考虑以下参数:

char words[8] = "one two";
string word1;
string word2;
stringstream ss;
Run Code Online (Sandbox Code Playgroud)

这段代码的输出:

ss << strtok(words, " ");
ss >> word1;
ss << strtok(NULL, " ");
ss >> word2;
cout << "Words: " << word1 << " " << word2 << endl;
Run Code Online (Sandbox Code Playgroud)

是:

Words: one
Run Code Online (Sandbox Code Playgroud)

而对于这段代码

ss << strtok(words, " ");
ss >> word1;
char* temp = strtok(NULL, " ");
word2 = temp;
cout << "Words: " << word1 << " " << word2 << endl;
Run Code Online (Sandbox Code Playgroud)

输出是:

Words: one two
Run Code Online (Sandbox Code Playgroud)

为什么stringstream可以处理第一个返回值strtok而不是第二个?

Vla*_*cow 5

你应该插入声明

ss.clear();
Run Code Online (Sandbox Code Playgroud)

那要清除流的eof状态.例如

    char words[8] = "one two";
    std::string word1;
    std::string word2;
    std::stringstream ss;
    ss << std::strtok(words, " ");
    ss >> word1;
    ss.clear();
    ss << std::strtok(NULL, " ");
    ss >> word2;
    std::cout << "Words: " << word1 << " " << word2 << std::endl;
Run Code Online (Sandbox Code Playgroud)