2

我是 C++ 新手,我正在对输入进行标记。注释行 "cout<< "p: " << p << endl;" 使第二个函数调用不执行,为什么?

#include <iostream>
#include <string>
#include <string.h> //for library strtok()
#include <sstream> //for useStringStream()
using namespace std;

void useStrTok(){
    char myString[] = "The quick brown fox";
    char *p = strtok(myString, " ");
    while (p) {
        cout<< "token: " << p<< endl;
        p = strtok(NULL, " ");
        //cout<< "p: " << p << endl;
    }
}    

void useStringStream(){
    string myText("The quick brown fox");
    istringstream iss(myText);
    string token;
    while(getline(iss,token, ' '))
    {
        cout << token << endl;
    }
}

int main(){
    useStrTok();
    useStringStream();
    return 0;
}
4

2 回答 2

2

因为 strtok 可能返回一个空指针并打印空指针导致崩溃。在访问指针之前检查指针的验证:

if (p)
{
    cout<< "p: " << p << endl;
}

请参阅strtok参考

于 2013-01-11T02:12:41.543 回答
0

尝试

cout<< "p: " << (void*)p << endl;

解决您的问题的最简单的方法,但可能无法达到您的预期。

于 2013-01-11T02:12:16.787 回答