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?


Log in to reply