Robert Bienert: (C) sichere Eingabe => unkonventionelle Methode

Beitrag lesen

Moin!

Hallo,

Du willst deine Zeichen eins zu eins direkt von der Tastatur lesen?

Eigentlich wollte ich nichts anderes, als dass durch die Bufferung nicht der letzte Wert in der nächsten Variable steht, aber zumindest für heute geb ich's auf, da ich jetzt Stunden wegen einer dämlichen Eingabe sitze.

Was heißt das genau? Liest du bei mehrfachen fgets-Aufrufen die gleichen Zeichen? Ich habe folgendes kleine Testprogramm geschrieben, welches exakt die Eingabe in 9-Byte-Blöcken ausgibt:

  
#include <stdio.h>  
#include <string.h>  
  
int main(void) {  
        char buff[10];  
  
        /* lesen */  
        fgets(buff, sizeof buff, stdin);  
  
        while (! feof(stdin)) {  
                printf("Block: '%s' (%u)\n", buff, strlen(buff));  
  
                fgets(buff, sizeof buff, stdin);  
        }  
  
        return 0;  
}  

Du kannst es ja einmal probieren und mir dann mitteilen, ob es bei dir funktioniert hat.

Mich würde schon brennend interessieren, wie das bei anderen Konsolenprogramme realisiert ist, nicht einen Buffer Overflow zu erzeugen (zB fgets), aber trotzdem die überschüssigen Werte los zu sein.

Wie gesagt, für dieses Verhalten gäbe es sonst nur die Erklärung, dass der Eingabepuffer zu klein ist oder das Newline nicht mitgeliefert wird, was allerdings sein sollte.

Viele Grüße,
Robert