Pointervariabeln verlieren den Inhalt
-
Guten Abend,
ich habe ein ziemlich blödes und merkwürdiges Problem. Meine Variabeln die ich mit Pointern erstellt habe, verlieren einfach ihren Wert, wenn ich z.b. ein strcpy ausführe oder andere funktionen.Hier mal der gesammte code:
void CClient::Parse(char *text) { char buffer[1024]; //memset(buffer,0,strlen(buffer)); strcpy(buffer,text); char *Pa[10]; s->Parse(buffer,Pa); if(strcmp(Pa[0],"LOGIN") == 0) { printf("%s\n",Pa[0]); char szbuffer[200]; sprintf(szbuffer,"SELECT name,password FROM benutzer WHERE name = '%s'",Pa[1]); printf("a%s\n",Pa[0]); char *erg = NULL; erg = sql->Select(szbuffer); printf("a%s\n",Pa[0]); if(strcmp(erg,"") == 0) { s->Send("300 wrong USER\n",sender); log->Print("Wrong Username\n"); } else { printf("%s\n",Pa[0]); char *c_erg[10]; //s->Parse(erg,c_erg); //printf("%s\n",Pa[0]); //printf("%s\n",c_erg[1]); if(strcmp(Pa[2],c_erg[1])==0) { s->Send("200 User Logged in\n",sender); log->Print("User Logged in\n"); } else { s->Send("400 Wrong PW\n",sender); log->Print("Wrong Password\n"); } } } else if(strcmp(Pa[0],"LOGOUT") == 0) { } } /////////////////// und hier noch die s->Parse Methode void CSocket::Parse(char *line,char *Params[]) { char buffer[1024]; strcpy(buffer,line); char *ptr = NULL; ptr = strtok(buffer," "); int i = 0; while(ptr != NULL) { Params[i] = ptr; ptr = strtok(NULL," "); i++; } }So das Parsen mit der CSocket::Parse funktioniert einwandfrei. Mein Array Params[] wird auch wunderbar erstellt.
Wenn ich aber jetzt in der CClient::Parse bin, dann funktioniert das strcmp einwandfrei. Also es wird Pa[0] verglichen und ist auch korrekt. Dann rufe ich die sprintf Funktion auf und dabei wird Pa[0] auf "" gesetzt. Genauso in der CSocket::Parse methode, nachdem ich strcpy ausgeführt habe, steht zwar alles in buffer drin, line ist aber leer.
Das ist doch nicht korrekt, das der Speicher einfach geleert wird. Welchen Fehler habe ich dort??
-
Warum postest du C Code ins C++ Forum
-
Ich glaube nicht das jetzt hier jemand Bock hat einen Buffer overrun in deinem C-Code zu suchen, wenn du es durch C++-Programmierung vermeiden könntest.
Setzen! Sechs!
-
snoopdog schrieb:
Dann rufe ich die sprintf Funktion auf und dabei wird Pa[0] auf "" gesetzt. Genauso in der CSocket::Parse methode, nachdem ich strcpy ausgeführt habe, steht zwar alles in buffer drin, line ist aber leer.
Evtl. Buffer Overruns? Mit Absicht machen die Funktionen das jedenfalls nicht. Probiers mal mit snprintf und strncpy. Oder machs in C++.
-
Fängt damit an dass der Array Pa Teile eines Buffers enthält, der mal auf dem Stack von CSocket::Parse lag...