2

私は C++ が初めてで、入力のトークン化に取り組んでいます。コメント行 "cout<< "p: " << p << endl;" 2 番目の関数呼び出しが実行されないのはなぜですか?

#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

null ポインターが strtok によって返される可能性があり、null ポインターを印刷するとクラッシュが発生するためです。ポインターにアクセスする前に、ポインターの検証を確認します。

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 に答える