#1 3. Mai 2009 mit getline() erzeugten String zerlegen Hallo, habe mir mit getline und folgendem Code einen Zeiger auf ein dynamisch langen String erzeugt, den ich auch ausgeben kann. Nun möchte ich diesen String gerne für Auswertungszwecke zerlegen z.B. einzelne darin enthaltene Worte abspeichern. Die Frage ist nun, wie mach ich das am besten? Ausgeben ist, wie man sieht schonmal kein Problem Hier mal der Source Code: Code: int main(void) { FILE *fd; char *datei = "testdatei.txt"; int nRet; size_t *t = malloc(0); char **gptr = (char **)malloc(sizeof(char*)); *gptr = NULL; if ( (fd = fopen(datei,"r")) == NULL) { fprintf(stderr, "\nKonnte Datei %s nicht öffnen!", datei); return EXIT_FAILURE; } while( (nRet=getline(gptr, t, fd)) > 0) { fputs(*gptr,stdout); } return EXIT_SUCCESS; } + Multi-Zitat Zitieren
#2 3. Mai 2009 AW: mit getline() erzeugten String zerlegen Wenn du ein Trennmuster hast, dann kannst du das ganze mit strtok/strchr erledigen. + Multi-Zitat Zitieren
#3 3. Mai 2009 ah, danke bin jetzt auch auf strtok gekommen, werd damit mal ein bisschen arbeiten und schauen was dabei rauskommt Sooo, habs jetzt mit strtok() hinbekommen. Nun hab ich aber folgendes Problem: Meine Textdatei liegt in ASCII vor. Das heißt wenn ich z.B. Code: ptr = strtok(*gptr, " \n-,!"); eingebe, werden nur die Leerzeichen als token anerkannt, den Rest erkennt er nicht, da es wahrscheinlich eine Kollision mit den ASCII Codes gibt. Wie kann ich die ASCII Codes in den string hauen? + Multi-Zitat Zitieren
#4 6. Mai 2009 AW: mit getline() erzeugten String zerlegen strtok() ist ASCII-Konform, und sollte diese Zeichen erkennen. Bist du dir sicher, dass im Text auch diese Zeichen vorkommen? Hast du, um den gleichen String nochmals zu bearbeiten, den ersten Parameter auch an stelle des Strings eine NULL übergeben? Hier ein kleiner Test von mir, der auch wunderbar läuft: Code: #include <stdio.h> #include <stdlib.h> int main( void ) { const char delim[] = " \n-,!"; char str[] = "Das ist nur ein kleiner Test,\nzur Überprüfung von strtok()!"; char *tok = strtok (str, delim); while (tok != NULL) { printf ("%s\n", tok); tok = strtok (NULL, delim); } return 0; } + Multi-Zitat Zitieren
#5 6. Mai 2009 AW: mit getline() erzeugten String zerlegen Fehler meinerseits Hab vergessen die delimeters auch im 2. Aufruf zu benutzen + Multi-Zitat Zitieren
#6 9. Oktober 2009 AW: mit getline() erzeugten String zerlegen hallo, ich bekomme "error: invalid initializer" bei char str[] = strg; wenn ich die funktion so verändere: kann mir jemand behilflich sein? danke! Code: #include <stdio.h> #include <stdlib.h> int main( void ) { const char* strg = "Das ist nur ein kleiner Test,\nzur Überprüfung von strtok()!"; const char delim[] = " \n-,!"; char str[] = strg; char *tok = strtok (str, delim); while (tok != NULL) { printf ("%s\n", tok); tok = strtok (NULL, delim); } return 0; } + Multi-Zitat Zitieren
#7 9. Oktober 2009 AW: mit getline() erzeugten String zerlegen Das was du da vorhast wirt auch nicht gehen. Um auf einen anderen String zu verweisen (Auch wenn sich der Inhalt dessen ändert), dann benötigst du einen Zeiger: char *str = (char*)strg; + Multi-Zitat Zitieren
#8 10. Oktober 2009 AW: mit getline() erzeugten String zerlegen Danke, es funktioniert jetzt: char* str = strg; + Multi-Zitat Zitieren