J'écris un programme de tokenisation de chaînes de caractères pour une affectation de devoirs en C++, qui utilise des pointeurs. Cependant, quand je lance & le déboguer, il indique que mon pointeur pStart, est invalide. J'ai le sentiment que mon problème réside dans mon constructeur param'ed, j'ai inclus le constructeur et la création d'objet ci-dessous.Bad Pointer? - C++
J'apprécierais que vous me disiez pourquoi on dit que pStart est un mauvais pointeur quand je le débogue.
Merci!
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", ' ');
stringtokenizer.cpp complète:
#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;
}
La fonction est ensuite censé arriver pour retourner un pointeur sur le mot suivant dans le tableau de caractères. Ce n'est pas fini pour le moment. :)
stringtokenizer.h complète:
#pragma once
class StringTokenizer
{
public:
StringTokenizer(void);
StringTokenizer(const char*, char);
char* Next(void);
~StringTokenizer(void);
private:
char* pStart;
char delim;
};
main.cpp complète:
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;
Quel est le message d'erreur que vous obtenez? – ihtkwot
'CXX0030: Erreur: l'expression ne peut pas être évaluée' Merci! – Alex
le CXX003 est un exécutable C/C++ runtime/compile-timeerror mais juste une erreur que vous obtenez dans le débogueur qui dit que vous utilisez abusivement évaluateur de valeur - http://msdn.microsoft.com/en-us/library/ 360csw6a (VS.71) .aspx Il serait préférable que vous puissiez envoyer un code plus complet. Les bits que vous avez collés sont incomplets et incorrects sous cette forme, c'est-à-dire que pStart est quoi? – mloskot