Forum: Compiler & IDEs strtoken funktion


von Michael (Gast)


Lesenswert?

Hallo,

ich möchte ein string aufteilen und benutze folgende funktion:
1
int strtoken(char *str, char *separator, char *token[])
2
{
3
  int i = 0;
4
5
  token[0] = strtok(str, separator);
6
7
  while ( token[i])
8
  {
9
    i++;
10
    token[i] = strtok(NULL, separator);
11
  }
12
  return ( i );
13
}
14
15
16
char buffer[] = "hamburg:120;";
17
S8 charsRead;
18
int parts;
19
char separator[] = {';',':'};
20
char *part[3];
21
22
23
24
parts = strtoken(buffer, separator, part);

in part[0] soll dann hamburg stehen
in part[1] 120

das funktioniert z.B. 5 mal richtig und dann steht manchmal in part[0] 
nur hamb

kann mir jemand weiterhelfen wo mein Fehler liegt?

Gruß Michael

von thomil (Gast)


Lesenswert?

Wie denkst du dass die strtok() Funktion weis, dass du genau 2 delimiter 
characters übergibst? Dein seperator muss ein \0 terminierter String 
sein.

von Microman (Gast)


Lesenswert?

Hallo,

hier noch eine Anmerkung. Die Funktion strtok ist nicht reentrant fähig. 
Falls dieses erforderlich ist, sollte man strtok_r verwenden. Dieses 
könnte auch ein komischen Verhalten erklären, wobei der Hinweis von 
thomil natürlich auch genau richtig ist.

LG Microman

von Michael (Gast)


Lesenswert?

Hallo,

besten Dank für die Tips.
Jetzt funktioniert das wie gewünscht.

Gruß Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.