Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Problem mit Vectoren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.05.2005, 11:18 Uhr
RedEagle



Hi,
ich möchte wörter aus einer Datei einlesen und in die "vector<char*> vcKeyword;" Variable speichern.
Das mache ich so:

C++:
char cvalue[100];
ifstream in;
in.open(pfad);

//...

do
{
  in >> cvalue;
  if(strcmp(cvalue,"&>end:")!=0)
  {
/**/MessageBox(NULL,cvalue,"Keywords",MB_OK);
   vcKeyword.push_back(cvalue);
  }
  else break;
}
while(true);

In der MessageBox wird auch das richtige Wort angezeigt, allerdings wird, wenn ich nachher die Variable durchsuche nichts gefunden.

Wenn ich die Wörter "von Hand" in die Variable speicher:

C++:
  vcKeyword.push_back("if");
  vcKeyword.push_back("do");
  vcKeyword.push_back("while");
  vcKeyword.push_back("char");
  vcKeyword.push_back("int");
  vcKeyword.push_back("then");
  vcKeyword.push_back("test");

Geht alles Problemlos.

Was hab ich Falsch gemacht??
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.05.2005, 12:47 Uhr
Spacelord
Hoffnungsloser Fall


cvalue wird interpretiert als Zeiger auf dein 100er char Array.
Wenn du den per push_back in deinem Vector speicherst bezieht sich der Zeiger immer auf den gleichen Speicherbereich .
Wenn du dass Array also in deiner do-while Schleife immer wieder überschreibst hast du am Schluss n-Kopien des Arrayzeigers im Vector und in diesem Speicherbereich steht das was du als letztes eingegeben hast.Alles andere ist futsch.
Nimm string!!

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 14.05.2005 um 12:47 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.05.2005, 13:05 Uhr
RedEagle



ok
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.05.2005, 13:35 Uhr
RedEagle



wenn ich jetzt einen String in die Variable spiechern möchte, meckert mein Compiler

C++:
string svalue;
//...
vcKeyword.push_back(svalue);


Fehler:
no matching function for call to `std::vector<char*,


ps.:
vector<string> vcKeyword;
ist nicht möglich, da mein gesammter code bereits mit char* arbeitet, und ich dann meine gesammten SyntaxHighlighting-klasse umschreiben müsste.
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.05.2005, 14:00 Uhr
Spacelord
Hoffnungsloser Fall


Das ist schlecht.Dann musst du ne tiefe Kopie deines C-Strings machen und diesen Zeiger im Vector speichern.
Also mit strlen die Länge des C-Strings im Puffer besorgen.Mit new Speicher dieser Größe besorgen und mit strcpy den Inhalt des Puffers in den neuen Speicherbereich kopieren.
Dann kannst du den "neuen" Zeiger an deinen vector übergeben.
Nicht vergessen den Speicher irgendwann wieder frei zugeben .

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.05.2005, 14:15 Uhr
RedEagle



ok
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: