buffer wird nicht erneuert



  • hey, ich poste mal in dieses Forum, da es eigentlich weniger mit der Winapi sondern C++ zu tun hat.
    Also folgender Code:

    string bufffer;
    	while(1)
    	{
    		bufffer.clear();
    		recv(s2, (char *)bufffer.c_str(), 50, 0);
    		MessageBox(0, bufffer.c_str(), szAppName, 0);
    	}
    

    Wenn ich vom clienten z.b. den Text "Hallo" schicke wird von der MessageBox Hallo ausgegeben. Wenn ich gleich danach z.b. nur ein "Z" schicke, wird Zallo ausgegeben. Warum ist das so? Ich habe doch vor recv den buffer geleert also müsste nichts mehr drinnen sein? Danke



  • recvuser! schrieb:

    ...

    recv(s2, (char *)bufffer.c_str(), 50, 0);
    

    Dir ist hoffentlich bewusst das c_str() einen Konstanten Buffer liefert, dein cast erzeugt ein Undefiniertes Verhalten (voraussichtlich mit Datenkorruption).

    In den Buffer eines Strings DARF man nicht von Außen schreiben!



  • Hmm, fragt sich was clear intern macht. Vielleicht wird ja nur eine 0 an die erste Stelle geschrieben, die du dann mit recv wieder überschreibst. Du schreibst ja auch per c_str-Pointer in den String, das ist ja nicht unbedingt der übliche Weg...

    buffffer schreibt man übrigens mit 4 'f'! 😉



  • char bufffer[50];
    	while(1)
    	{
    		recv(s2, (char *)bufffer, 50, 0);
    		MessageBox(0, bufffer, szAppName, 0);
    }
    

    geht genauso wenig. Wenn ich Hallo sende gibt es Hallo aus. Wenn ich danach i sende gibt es erst i alleine aus und dann iallo in einer 2. messagebox



  • recvuser! schrieb:

    Wenn ich Hallo sende gibt es Hallo aus. Wenn ich danach i sende gibt es erst i alleine aus und dann iallo in einer 2. messagebox

    Wenn du deine Daten nicht nullterminiert verschickst, werden sie auch nicht nullterminiert ankommen. Dann musst du dich darum schon selbst kümmern.



  • recvuser! schrieb:

    char bufffer[50];
    	while(1)
    	{
    		recv(s2, (char *)bufffer, 50, 0);
    		MessageBox(0, bufffer, szAppName, 0);
    }
    

    geht genauso wenig. Wenn ich Hallo sende gibt es Hallo aus. Wenn ich danach i sende gibt es erst i alleine aus und dann iallo in einer 2. messagebox

    Witzbold! 😃 Hier hast du ja auch kein "clear-ähnliches" Verhalten eingebaut, sprich ein Nullen des Puffers. Wenn dich die alten Werte nicht interessieren, dann leere buffer einfach vor dem Empfangen (z.B. mit memset).



  • ouuuargh wie peinlich! Hab doch glatt vergessen die 0 mitzuschicken -.-
    danke für die Hilfe!


Anmelden zum Antworten