Miniparser :)
-
Hi leute,
ich habe da ein kleines Problem:char cTempBuffer[255]; for(int i=0;i<256;i++) { if (cBuffer[i]!=';') {cTempBuffer[i] = cBuffer[i];} else {i=256;} }
gleich danach lase ich mir cBuffer und cTempBuffer ausgeben. Allerdings werden dort in cTemopBuffer, wo eigendlich ab dem Semikolon nichts mehr kommen dürfte, 2 zusätzliche zeihen angezeigt. Die kommen weder in cBuffer, noch in irgendeinem anderen Zusammenhang des Progeamms vor.
Könnt ihr euch vorstellen, wo der Fehler liegt?
Oder wenn ihr eine elegantere Möglichkeit wisst, eine Zeichenkette AB dem Semikolon abzuschneien ... lasst es mich bitte wissen
Ciao
IfiEdit:
hier noch die Ausgabe:Neuen Client angenommen (7/[0..9])
Checke Passwort: [user\ifi.pass;┌G] <-- ausgabe von cBuffer
Checke Passwort: [user\ifi.passh¶] <-- ausgabe von cTempBuffer
-
char cTempBuffer[256] = {0}; // 256 Zeichen alle auf 0 for(int i=0;i<255;++i) // ursprünglich waren es ja mal 255 elemente ( das 256ste heben wir uns für die Nullterminierung auf ! ) { if (cBuffer[i]!=';') cTempBuffer[i] = cBuffer[i]; else break;// reicht auch }
Eine andere Möglichkeit wäre es mit std::string zu realisieren z.b. so
std::string buffer("Das ist ein string mit einem ; der diesen text abschneidet"); std::string::size_type pos = 0; if((pos = buffer.find(";")) != std::string::npos) buffer = buffer.substr(0,pos);
oder so:
std::string buffer("Das ist ein string mit einem ; der diesen text abschneidet"); std::string::iterator iter = buffer.begin(), end = buffer.end(); while(iter != end && *iter != ';') ++iter; buffer = std::string(buffer.begin(),iter);
-
cTempBuffer muss auch mit einer \0 abgeschlossen werden.
Ausserdem ist dein Buffer nur 255 zeichen groß, i kann aber 255 werden und mit buffer[255] würdest du auf das 256te zeichen zugreifen.
Ausserdem würde man statt i=256 lieber break; schreiben um die schleife zu verlassen.
-
ok danke,
die rätselhafte zeichen waren also resultate, der falschen adressierung?
Auf jeden Fall funktioniert e jetzt. (auch ohne \0, werds aber beobachten, ob fehler auftauchen)