Hilfe zu strtok



  • Hallo,
    ich habe mehrere Dateien in denen steht: vorname;nachname;
    Mit strtok zerteile ich den string und gebe Vorname und Nachname auf dem Bildschirm aus. Wenn die Person jetzt aber 2 Vornamen hat die durch ein Leerzeichen getrennt sind Beispiel: klaus peter;schmidt;
    Dann sieht die Bildschirmausgabe so aus: klaus (NULL)
    Ohne das Leerzeichen funktioniert es: klauspeter schmidt.
    Weiß jemand woran das liegt?



  • Das liegt an deinem Code.

    Kann aber verschiedene Ursachen haben:
    - du benutz strok falsch
    - du verarbeitest das Ergebnis falsch
    - du machst die Ausgabe falsch
    - ...

    Zeig deinen (minimalen, fehlerhaften) lauffähigen Code und wir sagen dir, was falsch ist.



  • Minimaler Code:

    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
    
        char* ptr;
        char inhalt[100];
        FILE* fp;
        fp = fopen("1","r");
        fscanf(fp,"%s",&inhalt);
        fclose(fp);
        ptr = strtok(inhalt,";");
        printf("1. %s",ptr);
        ptr = strtok(NULL,";");
        printf(" %s",ptr);
        getchar();
    
        return 0;
    }
    

    Ausgabe mit Leerzeichen:

    1. klaus (NULL)
    

    Ausgabe ohne Leerzeichen:

    1. klauspeter schmidt
    


  • Das Problem ist hier das %s vom fscanf .
    Das liest nur bis zum ersten Whitespace (Leerzeichen, Tabulatoren und Zeilenende)

    Nimm zum einlesen einer ganzen Zeile fgets oder mach es gleich richtig mit fscanf

    char vorname[100], nachname[100];
    fscanf(fp," %[^;] ; %[^;] ;", vorname, nachname);
    

    Der Adressoperator bei Arrays ist meist falsch (Zeile 11).



  • Ok, danke für die Antwort


Anmelden zum Antworten