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

Beitrag lesen

Moin!

Meines Wissens bricht Scanf nach der angegebenen Anzahl von zeichen ab, schreibt also nicht einfach den Buffer weiter voll.

So weit ich das verstanden habe, liest sscanf aus dem "Buffer" aber aus, um die Daten dann weiterverarbeiten zu können:

int  sscanf ( char * buffer, const char * format [ , argument , ...] );

/* buffer  Buffer containing the string to be parsed for data. */


>   
> Das ist das, was ich meinte. Wo soll ich "buffer" herbekommen, wenn ich nicht schon vorher etwas irgendwie eingelesen habe.  
  
Es gibt doch auch noch fscanf: `int fscanf(FILE * restrict stream, const char * restrict format, ...);`{:.language-c}  
  
Ansonsten möchtest du vielleicht C++ probieren: Wenn du die string-Klasse im Zusammenhang mit Streams benutzt, hast du eine recht sichere Eingabe, z.B. Einlesen einer Zeile:  
  
~~~c
  
#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  

Viele Grüße,
Robert