strtok() und mehrere Tokens

Afritus

Mitglied
Guten Tag,

ich habe mir eben eine Funktion geschrieben, welche ein Token mit einem gewissen Index aus einem String zurückliefert. Sie klappt mit jedem Index, aber nur, wenn man sie nicht öfter aufruft. Im folgenden Codebeispiel wird im zweiten printf statt "ist" einfach NULL ausgegeben. Woran liegt das?

Code:
#include <stdio.h>
#include <string.h>

char* strToken(char* str, char* divider, int index)
{
  char* pointer = strtok(str, divider);
  int counter = 0;

  while(pointer != NULL)
  {
    if(counter == index)
    {
      return pointer;
    }
    pointer = strtok(NULL, divider);
    counter++;
  }

  return NULL;
}

int main()
{
  char str[] = "Das ist ein Test.";
  printf("1: %s\n", strToken(str, " ", 0));
  printf("2: %s\n", strToken(str, " ", 1));

  return 0;
}

Mit freundlichen Grüßen und Danke im Voraus,
Afritus
 
Hi.

Das Problem ist, das die strtok Funktion den Ursprungsstring modifiziert: sie fügt \0 Zeichen ein wenn sie einen Begrenzer gefunden hat.
 
Danke für die Antwort!
Ok, nun wird einiges klarer.
Aber wie kann ich das nun schön in einer Funktion lösen? Mit einer temporären Kopie des Pointers geht es ja dann offensichtlich auch nicht (gleicher Effekt) und extra Speicher dafür anzufordern und den String bei jeder Verwendung zu kopieren scheint mir auch keine gute Lösung zu sein.

Mit freundlichen Grüßen,
Afritus
 
Ohne zusätzlichen Speicher geht es nicht. Du könntest z.B. eine statische Variable in der Funktion verwenden und dort dynamisch Speicher anlegen und den jeweiligen Token hineinkopieren.

Dann solltest du die strpbrk Funktion verwenden statt strtok verwenden um den Original-String nicht zu zerstören. Die Funktion strspn könnte dabei auch ganz nützlich sein.
 

Neue Beiträge

Zurück