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 weiteren strtok(...) -Aufrufe, die diesen String betreffen, mit NULL als ersten Parameter aufgerufen werden. Du rufst es fälschlicherweise abwechselnd mit buffer und NULL 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.


Log in to reply