vscanf, vfscanf und vsscanf - Beispiele



  • halbwissen ist gefaehrlich.
    glaube umsomehr.



  • CStoll schrieb:

    Hast du eine bessere Methode, unter ANSI C Daten einzulesen? Dann immer her damit 😉

    Ja, z. B. strtok.

    Buffer aufmachen, file einlesen udn mit strtok die einzelnen
    tokens auslesen. Ist viel schneller und tausendmal zuverlässiger.



  • maximo schrieb:

    sorry, ich les nur vom buch ab 😉
    vscanf ist von C99 und dachte es ist sicherer?

    Also hier ein aus dem Kopf geschriebens Beispiel:

    /* Datei öffnen */
    FILE *p_file = fopen ("C:\\Datei", "rb");
    if (p_file == NULL)
    {
    return FALSE;
    }

    // Dateigröße bestimmen.
    struct _stat state;
    _fstat (fileno(p_file), state);
    size_t len = state.st_size;

    // Speicher entsprechender Größe allokieren
    char *p_buffer = malloc (len+1);
    if (p_buffer == NULL)
    {
    fclose (p_file);
    return -1;
    }

    // Datei lesen
    if (fread (p_buffer, 1, len, p_file)
    {
    fclose (p_file);
    free (p_file);
    return -2;
    }

    fclose (p_file);

    char *p = p_buffer;

    // Zum Beispiel csv parsen
    while ((p = strtok (p, ",\n")) != NULL)
    {
    /* Hier jetzt den gelesenen Wert verarbeiten.
    in p steht genau der Wertz der durch z. B.
    , oder \n getrennt wurde.
    */
    }
    free (p_buffer);
    }



  • Sicher könnte diese Variante sicherer sein, aber ob sie wirklich einfacher anzuwenden ist als die scanf-Funktionen wage ich zu bezweifeln:

    1. _fstate() ist afaik keine Standard-Funktion
    2. Einlesen von Tastatur wirst du damit auch nicht hinbekommen (oder schaffst du es, alle vom User kommenden Eingaben bei Programmbeginn zu bekommen?)
    3. korrekt parsen mußt du deine Daten an dieser Stelle auch noch

    PS: und "free(p_file);" ist nonsens 😉


Anmelden zum Antworten