3 Pluspunkte 0 Minuspunkte

Ich möchte einen String teilen

/peer name message

aber bekomme jedes mal nur den ersten Token angezeigt.

else if(message[0] == '/' && message[1] == 'p') {

    char *msg = strdup(message);
    printf("%s\n", msg);
    char *tok = strtok(msg, " "); // /peer
    printf("tok: %s\n", tok);
    char *peername = strtok(msg, " "); // name
    printf("peername: %s\n", peername);
    char *content = strtok(msg, ""); // der ganze rest ist content
    printf("content: %s\n", content);
}

Die Ausgabe sieht so aus

tok: /peer
peername: /peer
content: /peer
von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Du wendest strtok jedes mal auf denselben String an, dadurch wird jedes Mal von vorne begonnen und der erste Token zurückgeben.

Um den String korrekt zu teilen, solltest du nur einmal mit dem String aufrufen und dann für die weiteren Tokens immer NULL als Argument übergeben. Dadurch setzt strtok seine Position auf dem selben String fort und liefert den nächsten Token zurück.

else if(message[0] == '/' && message[1] == 'p') {

    char *msg = strdup(message);
    printf("%s\n", msg);

    char *tok = strtok(msg, " "); // /peer
    printf("tok: %s\n", tok);

    char *peername = strtok(NULL, " "); // name
    printf("peername: %s\n", peername);

    char *content = strtok(NULL, ""); // content
    printf("content: %s\n", content);

}

von (716 Punkte)