sscanf



  • Hallo Leute,

    ich bräuche mal ein wenig hilfe zu dem befehl sscanf, irgendwie komme ich mit diesem nicht klar.

    die grundlagen zu meinem problem, sehen folgendermaßen aus:

    ich habe einen adressstruct, der die struktur besitz:

    struct adresse {
    long kdnnr;
    char name [64];
    char vorname [64];
    char strasse [32];
    char nr [8];
    long plz;
    char ort [64];
    }

    diesen möchte ich in eine datei schreiben und später wieder auslesen, dazu nutze ich folgende ablauf:

    zuerst packe ich den ganzen struct mit sprintf zu einem block zusammen. der befehl dazu sieht so aus:
    sprintf (buffer, "05ld;%-64s;%-64s;%-32s;%-8s;%05ld;%-64s", jetzt die einzelene variablennamen );

    danach schiebe ich es mit fputs in die datei ( fputs (buffer, fp); )
    das funktioniert auch ohne probleme.

    beim nächsten programmaufruf möchte ich dies datei dann wieder einlesen.
    das mache ich mit fgets (fgets (buffer, 256, fp); )
    das funktioniert auch noch.
    danach möchte ich den buffer wieder in die einzlenen variablen zerlegen und das funktioniert irgendwie nicht.
    mein befehl dazu sieht so aus:

    sprintf (buffer, "05ld;%64c;%64c;%c32c;%8c;%05ld;%64c", jetzt die einzelene variablennamen );

    das problem, welches ich damit habe, ist das die zerlegung irgendwie nicht klappt, denn wenn ich einen string (z.b. char name[64]) zurück wandeln will, liest dieser mir den kompletten rest ein, d.h. name, vorname, strasse usw.
    aber das ist nicht das was ich möchte. welchen fehler habe ich bei sscanf gemacht.
    kann mir jemand helfen...???



  • sorry, der befehl zum zerlegen ist nicht sprintf sondern
    sscanf (buffer, "05ld;%64c;%64c;%c32c;%8c;%05ld;%64c", jetzt die einzelene variablennamen );



  • schau dir mal fwrite und fread an....passt glaub ich besser zu deinem problem...dabei werden die daten binär in die datei geschrieben bzw ausgelesen...

    mfg



  • Wenn Du mit scanf() und dem Format-Bezeichner %c Strings zerlegen willst, musst Du das abschließende '\0' selber anfügen.



  • fread und fwirte kann ich nicht benutzen, da die datei unix und windows kompatibel sein muss...

    und wie mache ich das am dummsten mit dem abschließen mit \0 ???

    kann ich das im aufruf von sscanf schon unterbringen oder muss ich jede einzelne variable erneut aufrufen und mit \0 abschließen ???



  • naja ... Du musst leider jede Variable mit '\0' abschließen. Das machst Du am einfachsten mit einer einfachen Zuweisung: name[10] = '\0';



  • ich bedanke mich herzlichst...



  • fwrite <stdio.h> ANSI, Win 95, Win NT

    aus der MSDN......

    mfg


Anmelden zum Antworten