strtok und array
-
Ich will eigentlich nur einen Teilstring, welchen ich durhc strtok erhalte in ein Feld/Array speichern, nur funktionierts mal wieder nicht so ganz.
token = strtok( *gptr, trenner ); nummer[i] = token;
wenn ich den token mit printf(token) ausgebe, wird mein gewünschter wert angezeigt/ausgegeben.
Aber wenn ich später mein Feld nummer ausgebe, wird immer alles ausgegeben (also so wie vor der trennung)jemand einen tipp?
gruß und danke
-
kannst du ein klein bisschen mehr code zeigen?
welcher typ ist nummer??token??
-
FILE *fd; char *datei = "D:/daten/datei"; int nRet; size_t *t = malloc(0); char **gptr = (char **)malloc(sizeof(char*)); *gptr = NULL; char trenner[] = "|"; char *token; if ( (fd = fopen(datei,"r")) == NULL) { fprintf(stderr, "\nKonnte Datei %s nicht öffnen!", datei); return EXIT_FAILURE; } while( (nRet=getline(gptr, t, fd)) > 0){ token = strtok( *gptr, trenner ); rueckmeldenr[i] = token; printf(token); // hier passt alles printf(rueckmeldenr[i]); // hier passt auch alles strcpy(rueckmeldenr[i],token); while( token != NULL ) { token = strtok( NULL, trenner ); } i++; } /* Array ausgeben */ int s; for(s = 0;s<10;s++) { printf(nummer[s]); /* hier wird dann die ganze zeile ausgegeben, nix getrennt durch token */ }
-
Hi!
size_t *t = malloc(0); char **gptr = (char **)malloc(sizeof(char*));
Das irritiert mich etwas...
nummer[s]
Wo bekommt nummer denn die Werte zugewießen. Ich sehs grad nich, sorry...
grüße
-
ich gehe stark davon aus, daß die Zeile "rueckmeldenr[i]=token;" dort oben überflüssig ist - du solltest dir lieber einen entsprechend großen Speicherbereich für das aktuelle Token per malloc() bereitstellen und den Teilstring per strcpy() dort reinpacken.
PS: Deine Einrückung ist ein Krampf.
-
nummer = rueckmeldenummer // ist das gleiche, hab ich gerade falsch geschrieben
strcpy(rueckmeldenummer[s],token);
hatte ich ja schon drin, aber das wirft mir ne Exception.
char* nummer[10]; int i = 0; // Nur fuer Testzwecke FILE *fd; char *datei = "X:/daten/108_fehlt"; int nRet; size_t *t = malloc(0); char **gptr = (char **)malloc(sizeof(char*)); *gptr = NULL; char trenner[] = "|"; char *token; if ( (fd = fopen(datei,"r")) == NULL) { fprintf(stderr, "\nKonnte Datei %s nicht öffnen!", datei); return EXIT_FAILURE; } while( (nRet=getline(gptr, t, fd)) > 0 && i <= 10){ token = strtok( *gptr, trenner ); //strcpy(nummer[i],token); printf(token); // richtige ausgabe /* while( token != NULL ) { token = strtok( NULL, trenner ); } */ i++; } /* Array ausgeben */ int s; for(s = 0;s<10;s++) { //printf("%p ] ",nummer[s]); //printf(nummer[s]); }
PS: Jo, mit den Einrückungen hast recht, da aber im moment so gut wie nichts funktioniert...
-
freakx0 schrieb:
PS: Jo, mit den Einrückungen hast recht, da aber im moment so gut wie nichts funktioniert...
...muss man sich auch keine Mühe geben den Code so zu formatieren dass man den Fehler evtl. schnell sieht. :p
*SCNR*
-
ok ok, gewonnen. Dann schieb ich das mal auf's Forenlayout
-
freakx0 schrieb:
nummer = rueckmeldenummer // ist das gleiche, hab ich gerade falsch geschrieben
strcpy(rueckmeldenummer[s],token);
hatte ich ja schon drin, aber das wirft mir ne Exception.
Da du vorher deinen Pointer umgebogen hast, kopiert diese Anweisung dein token aber auf sich selbst
-
char* nummer[10];
hab ich wohl falsch deklariert, sollte eigentlich ein Array/Feld mit Strings sein.
also:
nummer[0] = "balirgenbdwas";
nummer[1] = "wasanderes";
sollte darin gespeichert werden.Ich habe das Programm auch folgendermaßen verändert
char wert[20]; strcpy(wert,token); rueckmeldenr[i] = wert;
das funktioniert teilweise, also mein token bekomme ich, nur wird wohl immernoch überschrieben
woran könnte es liegen?
gruß
dominik
-
Ja, klar - du hast ein Array und biegst alle number[]-Elemente auf die Anfangsadresse dieses Arrays um. Wie ich oben schon sagte, du mußt dir deinen Speicher per malloc() besorgen:
number[i]=malloc(strlen(token)+1); strcpy(number[i],token);
-
oh sorry.
Aber vielen Dank für deine erfolgreiche Hilfe
Gruß
Dominik