Problem mit strtok()
-
Guten Abend,
wenn ich versuche mittels strtok etwas zu "splitten" klappt dies leider nicht so wie ich will.
Beispiel:char *p = NULL; char buffer[] = {"Hallo dies ist die URL von Google: http:\\google.de"}; p = strtok(buffer," "); printf("p1: %s\n",p); p = strtok(NULL," "); printf("p2: %s\n",p); p = strtok(buffer," "); printf("p3: %s\n",p); p = strtok(NULL," "); printf("p4: %s\n",p); p = strtok(buffer," "); printf("p5: %s\n",p); p = strtok(NULL," "); printf("p6: %s\n",p); p = strtok(buffer," "); printf("p7: %s\n",p); p = strtok(NULL," "); printf("p8: %s\n",p); //hier müsste er mir normal http:\\www.google.de anzeigen. aber er zeigt mir nur "http" und immer ein anderes sonderzeichen an
Ich weiß schlechtes Beispiel mir ist aber eben auf die schnelle nichts besseres eingefallen.
Es wird alles richtig ausgegeben bis auf die Zeile:printf("p8: %s\n",p);
Normal müsste http:\\www.google.de ausgegeben werden,aber mir wird nur "http" + immer ein anderes Sonderzeichen ausgegeben.
Was mache ich Falsch?
-
Lies Dir mal das durch.
Nachdem du einmal
strtok (buffer, " ");
aufgerufen hast, müssen alle weiterenstrtok(...)
-Aufrufe, die diesen String betreffen, mitNULL
als ersten Parameter aufgerufen werden. Du rufst es fälschlicherweise abwechselnd mitbuffer
undNULL
auf.
-
Es ändert auch nichts wenn ich nach dem ersten Aufruf strtok NULL als ersten Parameter übergebe.
-
Ich hab's so geändert:
char *p = NULL; char buffer[] = {"Hallo dies ist die URL von Google: http:\\google.de"}; p = strtok(buffer," "); printf("p1: %s\n",p); p = strtok(NULL," "); printf("p2: %s\n",p); p = strtok(NULL," "); printf("p3: %s\n",p); p = strtok(NULL," "); printf("p4: %s\n",p); p = strtok(NULL," "); printf("p5: %s\n",p); p = strtok(NULL," "); printf("p6: %s\n",p); p = strtok(NULL," "); printf("p7: %s\n",p); p = strtok(NULL," "); printf("p8: %s\n",p); //hier müsste er mir normal http:\\www.google.de anzeigen. aber er zeigt mir nur "http" und immer ein anderes sonderzeichen an return 0;
Die Ausgabe ist dann bei mir:
p1: Hallo p2: dies p3: ist p4: die p5: URL p6: von p7: Google: p8: http:\google.de
Wie hast du es denn gemacht?
-
Du benutzt bei der Adresse ein Escape-Zeichen oder auch einen Backslash(\). 1. benutzt man bei Internet adressen immer einen Slash (/), zweitens steht ein Escape-Zeichen immer für etwas besonderes in einem String. Möchte man nun ein Escape-Zeichen allein Schreiben, so verdoppelt man es. Es wird in deinem Code also von Anfang an nur "http:\google.de" in deinen String geschrieben. Da macht das strtok() keinen Fehler.