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 mitfscanf
char vorname[100], nachname[100]; fscanf(fp," %[^;] ; %[^;] ;", vorname, nachname);
Der Adressoperator bei Arrays ist meist falsch (Zeile 11).
-
Ok, danke für die Antwort