gets_s funktioniert nicht



  • _matze schrieb:

    Das hier

    buf[strlen(buf)] = '\r'; 
    		buf[strlen(buf)] = '\n';
    

    macht auch wenig Sinn, oder? Du musst dich schon entscheiden, was an die Stelle soll!

    Abgesehen davon: die Eingabe an sich klappt. Wenn ich deinen Code teilweise ausführe (ohne den recv-Kram), dann ist nach meiner Eingabe "ftp rgne" auch genau dieser String in buf.

    Doch, das macht sehr wohl Sinn, denn nachdem '\r' angefügt wurde liefert strlen(buf) ja einen um 1 erhöhten Wert zurück. Das ist also schon richtig.

    EDIT:
    Bei mir steht egal was ich eingebe immer der erste Teil nicht drin.

    EDIT2:
    Wenn ich auch nur das Code-Schnipsel ausführe, dann steht bei mir auch das richtige drin ...



  • FrEEzE2046 schrieb:

    Doch, das macht sehr wohl Sinn, denn nachdem '\r' angefügt wurde liefert strlen(buf) ja einen um 1 erhöhten Wert zurück. Das ist also schon richtig.

    Hehe, auch wieder wahr... 🤡



  • _matze schrieb:

    FrEEzE2046 schrieb:

    Doch, das macht sehr wohl Sinn, denn nachdem '\r' angefügt wurde liefert strlen(buf) ja einen um 1 erhöhten Wert zurück. Das ist also schon richtig.

    Hehe, auch wieder wahr... 🤡

    Es muss irgendeinen Seiteneffekt geben. Ich weiß nur nicht welchen^^. Vor allem da er bei gets_s( buf, 512 ) beim ersten Durchgang der Schleife immer einfach durchgeht ohne auf Eingabe zu warten ...



  • FrEEzE2046 schrieb:

    Doch, das macht sehr wohl Sinn, denn nachdem '\r' angefügt wurde liefert strlen(buf) ja einen um 1 erhöhten Wert zurück. Das ist also schon richtig.

    Die Gefahr besteht, das die abschließende 0 überschrieben wird.



  • dang0r schrieb:

    FrEEzE2046 schrieb:

    Doch, das macht sehr wohl Sinn, denn nachdem '\r' angefügt wurde liefert strlen(buf) ja einen um 1 erhöhten Wert zurück. Das ist also schon richtig.

    Die Gefahr besteht, das die abschließende 0 überschrieben wird.

    Wohl kaum, da ich das ganze Array mit '\0' gefüllt habe.



  • FrEEzE2046 schrieb:

    Es muss irgendeinen Seiteneffekt geben. Ich weiß nur nicht welchen^^. Vor allem da er bei gets_s( buf, 512 ) beim ersten Durchgang der Schleife immer einfach durchgeht ohne auf Eingabe zu warten ...

    Vermutlich solltest du vorher mal den Eingabepuffer leeren!



  • FrEEzE2046 schrieb:

    dang0r schrieb:

    FrEEzE2046 schrieb:

    Doch, das macht sehr wohl Sinn, denn nachdem '\r' angefügt wurde liefert strlen(buf) ja einen um 1 erhöhten Wert zurück. Das ist also schon richtig.

    Die Gefahr besteht, das die abschließende 0 überschrieben wird.

    Wohl kaum, da ich das ganze Array mit '\0' gefüllt habe.

    Werden 511 Zeichen eingelesen, sprengt dir die nächste Zeile dein Array.
    gets_s( buf, 512 );
    //cin.get( buf, 512 );
    buf[strlen(buf)] = '\r';



  • _matze schrieb:

    FrEEzE2046 schrieb:

    Es muss irgendeinen Seiteneffekt geben. Ich weiß nur nicht welchen^^. Vor allem da er bei gets_s( buf, 512 ) beim ersten Durchgang der Schleife immer einfach durchgeht ohne auf Eingabe zu warten ...

    Vermutlich solltest du vorher mal den Eingabepuffer leeren!

    Und wie? Zumindest

    cin.clear();
    cin.ignore(MAX_INT);
    

    führt dazu, dass er immer vorbei läuft^^.



  • cin? Du weißt schon, in welchem Forum du hier bist, oder? 😉



  • _matze schrieb:

    cin? Du weißt schon, in welchem Forum du hier bist, oder? 😉

    Ja, Ja. Im Endeffekt ist es mir gleich ob ich eine C oder C++ Lösung habe. Da es mit gets_s nicht so hinhauen möchte, bin ich auch zu cin bereit^^.

    Zu mal

    fflush(stdin);
    

    auch nichts bringt


Anmelden zum Antworten