fgets als scanf

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • fgets als scanf

    Hallo zusammen,

    Ich bin gerade dabei eine C Funktion zu schreiben welche mir eine Benutzereingabe einliest.

    Da ich noch relativ neu auf dem Gebiet bin, frage ich, ob diese Methode so Buffer Overflow sicher ist:

    Quellcode

    1. static const char *PromptTypesStr[4] = {"%d", "%s", "%lf", "%c"};
    2. char *buf = NIL;
    3. buf = (char*)malloc((sizeof(char) * len) + 1);
    4. // ...
    5. fgets(buf, len, stdin);
    6. fflush(stdin);
    7. sscanf(buf, PromptTypesStr[type], ptr);
    8. free(buf);
    9. // ...
    Alles anzeigen


    Oder gibt es noch eine einfachere Methode eine Eingabe sicher einzulesen?

    Grüße
  • So weit ich das aus den paar Zeilen überschaue?

    Quellcode

    1. fflush(stdin);

    Ist mir nur bekannt das das auf Microsoft C funktioniert. Siehe MSDN.

    Der C-Standard sagt:
    c-faq.com/stdio/stdinflush.html
    Also würde ich das schon mal nicht nutzen, wenn das sicher werden soll und das im Compiler-Manual nicht als funktionierend beschrieben worden ist.


    Hier 'nil':
    stackoverflow.com/questions/1683608/c-nil-vs-null

    Wie gross ist 'len'?

    Versuche mal einen minimalen kompletten lauffähigen Quelltext zu zeigen. Kann sein das das bei dir auf deinem Compiler unter deinem Betriebssystem läuft? Sollte aber nicht ganz normgerecht sein. So kann man das bei nicht passenden Vorgaben unsicher bekommen.

    Beispiel für minimale Quelltextbeispiele:
    cplusplus.com/reference/cstdlib/malloc/
    Manchmal stehen bei der Referenz auch noch die Ergebnisse.

    MfG bcc-fan