Я пишу программу токенизации строк для домашнего задания на C ++, в которой используются указатели. Однако, когда я запускаю и отлаживаю его, он говорит, что мой указатель pStart недействителен. У меня такое ощущение, что моя проблема заключается в моем param'ed конструкторе, я включил и конструктор, и создание объекта ниже.
Буду признателен, если вы скажете мне, почему он говорит, что pStart является плохим указателем, когда я отлаживаю его.
Спасибо!
StringTokenizer::StringTokenizer(char* pArray, char d)
{
pStart = pArray;
delim = d;
}
// create a tokenizer object, pass in the char array
// and a space character for the delimiter
StringTokenizer tk( "A test char array", ' ' );
Полная строкаtokenizer.cpp:
#include "stringtokenizer.h"
#include <iostream>
using namespace std;
StringTokenizer::StringTokenizer(void)
{
pStart = NULL;
delim = 'n';
}
StringTokenizer::StringTokenizer(const char* pArray, char d)
{
pStart = pArray;
delim = d;
}
char* StringTokenizer::Next(void)
{
char* pNextWord = NULL;
while (pStart != NULL)
{
if (*pStart == delim)
{
*pStart = '\0';
pStart++;
pNextWord = pStart;
return pNextWord;
}
else
{
pStart++;
}
}
return pNextWord;
}
Функция Next предназначена для возврата указателя на следующее слово в массиве char. Это в настоящее время не закончено. :)
Полная строкаtokenizer.h:
#pragma once
class StringTokenizer
{
public:
StringTokenizer(void);
StringTokenizer(const char*, char);
char* Next(void);
~StringTokenizer(void);
private:
char* pStart;
char delim;
};
Полный main.cpp:
const int CHAR_ARRAY_CAPACITY = 128;
const int CHAR_ARRAY_CAPCITY_MINUS_ONE = 127;
// create a place to hold the user's input
// and a char pointer to use with the next( ) function
char words[CHAR_ARRAY_CAPACITY];
char* nextWord;
cout << "\nString Tokenizer Project";
cout << "\nyour name\n\n";
cout << "Enter in a short string of words:";
cin.getline ( words, CHAR_ARRAY_CAPCITY_MINUS_ONE );
// create a tokenizer object, pass in the char array
// and a space character for the delimiter
StringTokenizer tk( words, ' ' );
// this loop will display the tokens
while ( ( nextWord = tk.Next ( ) ) != NULL )
{
cout << nextWord << endl;
}
system("PAUSE");
return 0;