MoechtegernFI Geschrieben 15. Februar 2003 Geschrieben 15. Februar 2003 Hallo zusammen! Ich hab da n kleines Prob...und zwar habe ich folgendes Beispiel aus "C von Anfang an" im KDevelop 2.1 unter Suse Linux 8.0 eingegeben und bekomme vom Debugger die Fehlermeldung : "the 'gets' function is dangerous and should not be used." Bin nu ich doof, der Compiler oder der Author von dem Buch? /* bspl0037.c */ #include <stdio.h> #include <string.h> main() { char satz[80]; printf("\nBitte einen Satz eingeben\n>"); gets(satz); printf("\n%s",satz); printf("\nDer Satz besteht aus %i Zeichen.",strlen(satz)); printf("\n\nsatz[5] enthaelt eine binaere Null.\n"); satz[5]='\0'; printf("\n%s",satz); printf("\nDer Satz besteht aus %i Zeichen.",strlen(satz)); }
nic_power Geschrieben 15. Februar 2003 Geschrieben 15. Februar 2003 Die Meldung des Compilers weist Dich dezent darauf hin, dass "gets" ein paar Fallstricke hat. Gets() ist sollte wenn moeglich vermieden werden, da Du keinerlei Bounds-Checking beim Einlesen der Strings machen kannst. D.h. Wenn der Nutzer einen String eingibt der die von dir vorgesehene Laenge ueberschreitet, wird auf nicht allokierten Speicher zugegriffen. Zitat aus der Man-Page: BUGS Never use gets(). Because it is impossible to tell with_ out knowing the data in advance how many characters gets() will read, and because gets() will continue to store char_ acters past the end of the buffer, it is extremely danger_ ous to use. It has been used to break computer security. Use fgets() instead. It is not advisable to mix calls to input functions from the stdio library with low - level calls to read() for the file descriptor associated with the input stream; the results will be undefined and very probably not what you want. Nic
MoechtegernFI Geschrieben 15. Februar 2003 Autor Geschrieben 15. Februar 2003 Der Compiler will das Prog aber nicht ausführen...
nic_power Geschrieben 15. Februar 2003 Geschrieben 15. Februar 2003 Da es sich nur um eine Warnung des Linkers handelt und ich ansonsten keine Fehler (im Sinne von: der Compiler bricht ab) finden kann, solltest Du eigentlich eine Datei mit dem Namen "a.out" auf der Platte finden (Aufruf mit: "./a.out") Nic
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden