Robert Bienert: (C) sichere Eingabe? (Buffer Overflows vermeiden)

Beitrag lesen

Moin!

mit fscanf funktioniert es zwar, aber es tritt genau dieses lästige Verhalten wie bei fgets auf, nämlich dass die Zeichen die zuviel sind, einfach solange weiter ausgegeben werden, bis der String zu Ende ist.

Moment, heißt das, dass die übrigen Zeichen im Eingabepuffer verbleiben, bis der nächste Lesevorgang sie abholt oder liest du ständig das gleiche? Letzteres könnte an einem nicht abgeholten Newline liegen.

#include <string>
#include <iostream>

std::string eingabe;

std::getline(std::cin, eingabe);    // eingabe enthält nun genau eine Zeile
std::cin >> eingabe;                // eingabe enthält ein Wort


>   
> Und was passiert, wenn die Zeile 1000 Zeichen lang ist? :)  
  
Das ganze fällt dir unter Umständen dann auf den Fuß, wenn die Eingabe größer `pow(2, sizeof(size_t)*8))`{:.language-c} (entspricht mathematisch [latex]2^{sizeof(size\\_t) \* 8}[/latex]) ist (unter der Annahme, dass auf deinem Rechner ein Byte aus 8 Bit besteht ;-) ) und der komplette virtuelle Speicher dem Programm zur Verfügung steht.  
  
Viele Grüße,  
Robert