gets/scanf - Buffer overflow?



  • Hallo,

    ich mache mir gerade Gedanken über (eventuelle) Buffer overflow Probleme bei der Verwendung von gets bzw. scanf, da beide Funktionen nicht die (maximal zulässige) Länge der Strings überprüfen.

    Wie löst ihr dieses Dilemma?
    Ich habe mir folgenden Code überlegt:

    char buffer[256];
    char zeichen[256];
    fgets(buffer, 255, stdin);
    sscanf(buffer, "%s", zeichen);
    

    Gruß,
    mcspam



  • Richtig, man sollte anstatt gets() fgets(..., stdin) verwenden.

    Mir ist allerdings nicht ganz klar, warum du nach dem Einlesen mit fgets() den String über sscanf() in ein anderes Array kopierst. Was hat das denn für einen Sinn? Zum Kopieren kannst du übrigens auch strcpy() oder memcpy() verwenden, wenn es das sein sollte.



  • Ist in dem Zusammenhang auch nicht wirklich ersichtlich.
    In meinem Fall stand ich vor der Aufgabe eine Datei zu parsen.
    Dazu muss man sie wohl erst in einen Buffer einlesen und den Overflow mit fgets verhindern.



  • Oder sich die Doku zu *scanf ansehen 🙄


Anmelden zum Antworten