Christian Seiler: WARNUNG: gets() in C NICHT verwenden! Gefährlich!

Beitrag lesen

Hallo,

gets(eingabe);

ACHTUNG: GEFAHR! Das prüft die Puffergröße nicht. Wenn der Puffer also nicht groß genug ist, wird irgendwohin in den Speicher geschrieben. Du hast Dir hier einen klassischen stack-based buffer overflow gebastelt, Quelle Nr. 1 für Sicherheitslücken in C-Software. Gut, bei Deinem einfachen Programm ist das noch relativ egal, das macht ja sowieso nichts - aber Du solltest Dir das gar nicht erst angewöhnen.

ALSO: NUTZE NIE, NIE, NIE gets(). NIE. UNTER KEINEN UMSTÄNDEN. Das ist eine der wenigen Funktionen, vor der man IMMER abraten muss. IMMER. Mein Linker warnt mich sogar davor:

main.c:(.text+0x6d): warning: the `gets' function is dangerous and should not be used.

Als Alternative bietet sich fgets() an, der kann man die Puffergröße noch übergeben - man muss dafür halt stdin auch noch angeben:

fgets(eingabe, 1024, stdin);

Allerdings: fgets() lässt das \n-Zeichen am Ende einer Zeile (unter Windows vmtl. sogar \r\n) stehen. Daher musst Du Deine Schleife anpassen, wenn das genau so reagieren soll:

        while(eingabe[i] != '\0' && eingabe[i] != '\r' && eingabe[i] != '\n')  
                i++;

Viele Grüße,
Christian