Anzeige:
Ergebnis 1 bis 5 von 5

Thema: `gets' function is dangerous

  1. #1
    Registrierter Benutzer
    Registriert seit
    12.10.2000
    Ort
    Bochum
    Beiträge
    41

    Question `gets' function is dangerous

    Hi All,
    naja irgendwie habe ich ein kleines problem.
    Was mich stoert ist folgendes. Ich will die Eingabe eines strings von der konsole haben. und dazu verwende ich folgendes.
    puts("Dateiname für Werte: ");
    if(gets(file_name_daten) == NULL) {
    printf("Kann Eingabe nicht lesen.\n Beende Programm\n.");
    exit (1);
    }
    else {......}

    beim compilieren mit gcc -o xxx xxx.c
    erhalte ich folgende warnung

    /tmp/ccXzO3mW.o: In function `main':
    /tmp/ccXzO3mW.o(.text+0x6d6): the `gets' function is dangerous and should not be used.

    So das ist es auch schon. Das Programm funktioniert zwar, aber mich stoert die Warnung und ich glaube das sich irgendwie dabei ein Folgefehler einschleicht.
    Fals jmd. eine alternative kennt, oder weiss was ich beheben kann der kann ja was dazu schreiben.
    Danke :-)

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.04.1999
    Ort
    Ulm
    Beiträge
    33
    Hi!

    Du kannst ja den String mit der scanf()-Funktion einlesen und dann mit einem strlen() die Länge prüfen. Damit müsstest du imho das gleiche erreichen können und du hast die Warning mit gets() nicht mehr.

    Gruß Jimmy

    P.S. Ich hab noch den Grund gefunden warum das gets() so "gefährlich" ist:

    The gets() function, is so dangerous that you should remove it from your code immediately. It copies user input directly into a buffer once it reaches the end of a line. There is no way to tell the function how much it should copy.

    Das ganze hab ich von http://security.devx.com/upload/free...0/mh1200-1.asp

    Ist zwar über Win32 programmierung, aber ich bin mir sicher bei der gets() trifft das auch auf Linux und Unix Systeme zu.
    Geändert von Jimmy (07-11-2001 um 06:37 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    19.10.1999
    Ort
    Dresden
    Beiträge
    255
    Beispiel mit fscanf:

    #include <stdio.h>

    int main(){
    char input[10];

    fscanf(stdin, "%9s", input);
    printf("%s", input);

    return 0;
    }

    Oder - eleganter - gleich mit C++:

    #include <iostream>
    #include <string>
    using namespace std;

    int main(){
    string input;

    cin >> input;
    cout << input << endl;

    return 0;
    }

    Thomas

  4. #4
    Registrierter Benutzer
    Registriert seit
    21.01.2001
    Beiträge
    157
    vergiss sauch canf(), kann auch gefährlich sein und ist für alles ausser strings unberechenbar.

    Dann doch lieber gleich fgets(). Hier kannst Du eine maximale Länge angeben und Bufferoverflows vermeiden.

  5. #5
    Registrierter Benutzer
    Registriert seit
    12.10.2000
    Ort
    Bochum
    Beiträge
    41
    hi danke fuer die flotten antworten werde mich sogleich aufmachen und das ganze mal checken od es was kann.

    Cu

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •