Großes strtok-Problem
-
Hilft dir das weiter: Nochmal zu Threads
MfG, phreaking
-
selber parsen... strtok ist ja keine groesse zauberei, mit strchr kann man das sehr leicht selber machen...
-
Original erstellt von Mr. Suicide:
**Ich habe daran gedacht mir eine SafeStrtok-Funktion zu schreiben, mit folgender Syntax:char* SafeStrtok(char* what,char seperator);
**
Das Ding gibt's, in fast genau der Form, schon unter dem Namen 'strchr' in der Standardbibliothek.
-
Hab mit strtok_r aus einer FreeBSD Datei rauskopiert.
Jetzt funzt's.char *__strtok_r(char *s, const char *delim, char **last) { char *spanp, *tok; int c, sc; if (s == NULL && (s = *last) == NULL) return (NULL); /* * Skip (span) leading delimiters (s += strspn(s, delim), sort of). */ cont: c = *s++; for (spanp = (char *)delim; (sc = *spanp++) != 0;) { if (c == sc) goto cont; } if (c == 0) { /* no non-delimiter characters */ *last = NULL; return (NULL); } tok = s - 1; /* * Scan token (scan for delimiters: s += strcspn(s, delim), sort of). * Note that delim must have one NUL; we stop if we see that, too. */ for (;;) { c = *s++; spanp = (char *)delim; do { if ((sc = *spanp++) == c) { if (c == 0) s = NULL; else s[-1] = '\0'; *last = s; return (tok); } } while (sc != 0); } /* NOTREACHED */ } char *SafeStrtok(char *s, char *delim) { char *last; return (__strtok_r(s, delim, &last)); }
[ Dieser Beitrag wurde am 28.10.2002 um 20:55 Uhr von Mr. Suicide editiert. ]
-
deine Safe Funktion bringt nichts, da du wieder static benutzt, dann kannst du strtok direkt benutzen, ist genauso Thread Safe
BTW.
sind Unterstriche am Anfang des Dateinamens AFAIK dem Compiler vorbehalten.
-
Whoops static habich nicht gelöscht...
-
jetzt hast du aber das Problem, dass last immer wieder neuinitalisiert wird und sich also die Position nicht merkt.
-
Und was soll ich tun...
-
dir bleibt nichts anderes über, als Prozesse anstelle von Threads zu verwenden, strtok_r zu benutzen, mit dem Zusatz Parameter, eine eigene tok Funktion schreiben, die keine weiteren Informationen benötigt (zB. liefert die einfach ein char** zurück, in dem alles getokenized ist).
-
Trotzdem danke.