2013-12-02 4 views
0

Я пытаюсь написать программу, которая будет анализировать строку и давать каждую позицию слова. Я не могу понять, почему я получаюInvalid null pointer

«DEBUG Assertion Failed» Experssion: недопустимый указатель нулевого

окна, когда он достигает последнее слово строки.

char * pointer_char; 
int pos = 0; 
std::string str = "This test string will fail at this word..!. "; 

int i = 0; 
int length = str.length(); 

char * c = new char [str.size()+1]; 
std::copy(str.begin(), str.end(), c); 
c[str.size()] = '\0'; 

cout << "Testing string is " << str << endl << endl; 
pointer_char = strtok (c," "); 
while(pointer_char != NULL) 
{ 
    cout << pointer_char << endl; 
    pointer_char = strtok(NULL, " .!"); 
    string word = pointer_char; 

    size_t found= str.find(word); 
    if (found!=string::npos) 
    cout << "Position of " << word << " found at: " << int(found) << endl; 
    system("pause"); 
} 
return 0; 
+0

Ваше продолжение 'strtok()' немного преждевременно. Он должен быть на * дне * вашего цикла; не верх. – WhozCraig

ответ

1

Проблема в том, что вы не проверяете возвращаемое значение strtok.

pointer_char = strtok(NULL, " .!"); 
    string word = pointer_char; 

Вы проверяете его только в верхней части цикла.

pointer_char = strtok(nullptr, " .!"); 
    if (pointer_char == nullptr) 
     break;