cin und Buffer Overflow



  • Hallo,
    also in C wissen wir ja alle, dass solch ein Code anfällig für Buffer Overflow ist:

    char string[10];
    scanf("%s",string);

    Eine Lösung dafür wäre:
    scanf("%9s",string);

    Oder fgets(); etc. zu benutzen.

    Aber wie sieht das jetzt in C++ aus:
    char string[10];
    cin >> string;

    Dies läuft ja auch über, wenn ich mehr als 10 Zeichen eintippe. Allerdings habe ich bisher noch in keinem Buch gesehen, wie man die Länge der Eingabe bei cin; begrenzen kann.
    Außerdem beziehen sich die meisten Artikel über Buffer Overflow auf scanf(); oder strcpy(); (etc).

    Muss man hier also auf eine andere Funktion umsteigen, oder kann ich bei cin angeben, wie lang die Eingabe sein soll?

    MFG



  • Man könnte einfach googlen, dann käme man beim zweiten Ergebnis zu dem hier.

    Es hätte mich auch schwer gewundert, wenn cstdio den iostreams etwas voraus hätte :xmas1:



  • Ich les dazu immer einen String ein, so kann ich nicht nur die Länge angeben sondern auch gleich Whitespace, etc. miteinbeziehen

    char myStr [100];
    cin.getline(myStr,10);
    
    // even better
    #include <string>
    ...
    string  myStr;
    getline(cin,myStr);
    

    MfG SideWinder


Anmelden zum Antworten