problem bei chat-system
-
guten abend!
ich versuche mich gerade an der programmierung eines servers&clients für ein chatsystem.
relativ simpel also senden/empfangen in einer konsole.jetzt habe ich folgendes problem
die methode InputMessage()
Message *InputMessage() { int count=0; char temp; char *buf=NULL; while((temp=fgetc(stdin))!='\n') { buf=(char *)realloc(buf,++count+1); buf[count-1]=temp; } buf[count]='\0'; count++; printf("%s",buf); //ausgabe: z.B "hi" return new Message(-1,count,buf); };
ruft den konstruktor von message auf
Message::Message(int uid,int size,char *message) { this->uid=uid; this->size=size; printf("%s",message); //ausgabe :~"===²²²²yyyyyy" this->message=message; };
worin könnte hier ein problem liegen?? ich ändere den string ja nicht mehr
bitte helft mir! danke im voraus.
-
Mein Vorschlag: Verwende keine nackten char-Zeiger, sondern lieber std::string. (außerdem vermute ich, daß du auch die Message nicht unbedingt auf dem Heap anlegen mußt)
-
Ok..ich denke nur das in diesem fall char-zeiger idealer sind da ich sie via winsock versende
-
Wenn du dich wirklich mit nackten Zeigern beschäftigen willst, mußt du aber sehr genau wissen, was du da machst - und deine Frage klingt nicht danach. Aber nur die Tatsache, daß irgendwo tief im Inneren des Programms jemand char-Zeiger benötigt, würde mich nicht davon abhalten, im restlichen Programm mit std::string zu arbeiten (zur Not kannst du per c_str() an die darunterliegende Repräsentation als char-Array herankommen).
PS: Hast du dein Problem mal im Debugger nachverfolgt?
-
ja habe ich. der string ändert sich beim eintritt in den konstruktor.
edit: habe das mit den char zeigern in der schule so gelernt(linux)
-
Message::Message(int uid,int size,char *message)
gib deinem Parameter "message" mal nen anderen namen. Ich vermute mal das dir printf() den Inhalt deines Klassenmembers "message" ausgibt.
gruss
Dirk
-
florian22222 schrieb:
edit: habe das mit den char zeigern in der schule so gelernt(linux)
Vieles, was in C gut und üblich war, gilt in C++ als veraltet und zu fehleranfällig. Und wenn du in C++ programmieren willst, solltest du dir einen guten C++ Stil angewöhnen und nicht so einen Hybrid aus C und C++.
PS: Ich hab' mal deine Fragmente zusammengebaut und konnte dein Problem nicht nachvollziehen.
-
danke für die mühe!
das problem ist/war dass ich in der schule c hatte und hobbymäßig c++ programmierte.
echt guter tipp mir einen c++ stil anzueignen.
erste frage: warum struct und nicht class? die Message enthält nämlich noch mehr als nur einen konstruktor...
zweitens: kennst du ein gutes buch oder ein tutorial für einen guten c++ stil?
-
florian22222 schrieb:
erste frage: warum struct und nicht class? die Message enthält nämlich noch mehr als nur einen konstruktor...
Weil's für den Testfall egal war und ich ein wenig schreibfaul bin struct und class unterscheiden sich nur in der Default-Sichtbarkeit der Member und sind ansonsten austauschbar.
-
Und kannst du mir irgendeinen tipp geben für einen c++ stil?