lima-city: Webhosting, Domains und Cloud
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 (722 Punkte)  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2.3k Fragen

2.8k Antworten

266 Kommentare

14 Nutzer