Nazwa edytuj

strtok, strtok_r - wydzielanie słów z łańcuchów

Składnia edytuj

      #include <string.h>
      char *strtok(char *s, const char *delim);
      char *strtok_r(char *s, const char *delim, char **ptrptr);

Opis edytuj

"Słowo" jest to niepusty ciąg znaków, które nie występują w łańcuchu delim, poprzedzony znakiem \0 lub znakiem występującym w delim.

Funkcja strtok() służy do rozkładania ciągu znaków s na słowa. Pierwsze odwołanie do strtok() powinno posiadać s jako pierwszy argument. Następne wywołania powinny mieć jako pierwszy argument NULL. Każde wywołanie zwraca wskaźnik do następnego słowa lub NULL, gdy nie ma już więcej słów.

Jeśli słowo kończy się separatorem (delim), to ten kończący znak jest nadpisywany przez \0 i zapamiętywany jest wskaźnik do następnego znaku dla następnego wywołania strtok. Ciąg separatorów delim może być inny dla każdego wywołania.

Funkcja strtok_r() działa tak samo, jak strtok(), ale zamiast korzystać ze statycznego bufora, korzysta ze wskaźnika do przydzielonego przez użytkownika wskaźnika char*. Wskaźnik ten, parametr ptrptr, nie może zostać zmieniony podczas rozkładania jednego łańcucha.

Usterki edytuj

Nigdy nie należy używać tej funkcji. Jeśli jest to jednak konieczne, należy zauważyć, że:

  • Funkcje te modyfikują swój pierwszy argument.
  • Tożsamość znaku separatora jest tracona.
  • Funkcje te nie mogą być stosowane z ciągami stałymi.
  • Funkcja strtok() korzysta ze statycznego bufora, więc nie jest przystosowana do wielowątkowości. Jeśli ma to znaczenie, należy używać strtok_r().

Wartość zwracana edytuj

Funkcja strtok() zwraca wskaźnik do następnego słowa lub NULL, jeśli nie ma już więcej słów.