peinliches Problem



  • Hallo,

    Problem:
    Wenn ich einen String auf diese Art einlese:
    scanf("%s", str);
    und es kommt ein Leerzeichen in der Eingabe vor so liest er nur bis zum Leerzeichen ein. Habe auch schon probiert mit gets einzulesen ist mir aber irgendwie nicht besonders sympathisch, wenn ich bei jedem Mal kompilieren eine Fehlermeldung bekomme, dass die Verwendung der Funktion gets gefährlich ist.

    Danke im voraus
    Sebastian



  • nimm fgets, als Datei gibst du einfach stdin an. (BTW: gets ist wirklich sehr gefährlich!)

    Ich verschieb das mal in das ISO C Forum, da es kein Unix spezifisches Prob ist



  • du könntest aber auch

    scanf( "%[^\n]s", IrgendeinString );
    

    schreiben.
    weiß jetzt aber nicht ob diese form standardmäßig in jedem compiler eingepflanzt ist 😕

    mfg



  • Ich würde dann aber das "s" in dem Format-String weglassen ....



  • @kingruedi:

    **nimm fgets, als Datei gibst du einfach stdin an. (BTW: gets ist wirklich sehr gefährlich!)
    **

    Wieso ist gets() "gefährlich"?



  • Ganz einfach, wegen einem moeglichen Buffer-Overrun. Da ist die Eingabe einfach laenger als der Puffer und schon knallt's. Deswegen ist fgets() die Methode der Wahl - da kann man die maximale Anzahl der einzulesenden Zeichen begrenzen.



  • danke!!
    funktioniert schon perfekt*gg*!

    ist das wirklich kein unix spezifisches problem?
    habs zwar nicht ausprobiert aber soweit ich mich
    erinnern kann hatte ich unter win nie ein problem.

    Sebastian



  • Original erstellt von Sebastian Sieber:
    habs zwar nicht ausprobiert aber soweit ich mich
    erinnern kann hatte ich unter win nie ein problem.

    Ich sehe nirgendwo ein Problem... du etwa?

    der gcc liefert dir eine WARNUNG, keinen FEHLER.



  • Original erstellt von Martin G:
    @kingruedi:
    Wieso ist gets() "gefährlich"?

    Weil gets keine Überprüfung der Buffergrößen vornimmt, also hat man leicht einen Bug im Programm, wenn man dann noch das Programm als suid ausführt oder ähnliches, hat man einen schönen Lokal-Root-Exploit, sein Programm (Firma) bekommt einen schlechten Ruf im Thema Sicherheit etc.. Das der GCC warnt, hat schon einen Grund


Anmelden zum Antworten