.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (C) 2005, 2013 Michael Kerrisk .\" a few fragments from an earlier (1996) version by .\" Andries Brouwer (aeb@cwi.nl) remain. .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Rewritten old page, 960210, aeb@cwi.nl .\" Updated, added strtok_r. 2000-02-13 Nicolás Lichtmaier .\" 2005-11-17, mtk: Substantial parts rewritten .\" 2013-05-19, mtk: added much further detail on the operation of strtok() .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH strtok 3 "23 lipca 2024 r." "Linux man\-pages 6.12" .SH NAZWA strtok, strtok_r \- wydziela słowa z łańcuchów .SH BIBLIOTEKA Standardowa biblioteka C (\fIlibc\fP,\ \fI\-lc\fP) .SH SKŁADNIA .nf \fB#include \fP .P \fBchar *strtok(char *_Nullable restrict \fP\fIstr\fP\fB, const char *restrict \fP\fIdelim\fP\fB);\fP \fBchar *strtok_r(char *_Nullable restrict \fP\fIstr\fP\fB, const char *restrict \fP\fIdelim\fP\fB,\fP \fB char **restrict \fP\fIsaveptr\fP\fB);\fP .fi .P .RS -4 Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)): .RE .P \fBstrtok_r\fP(): .nf _POSIX_C_SOURCE || /* glibc w wersji <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE .fi .SH OPIS Funkcja \fBstrtok\fP() dzieli łańcuch na sekwencję zera lub więcej niepustych słów. Przy pierwszym wywołaniu funkcji \fBstrtok\fP(), łańcuch do przetworzenia powinien być podany w \fIstr\fP. W każdym kolejnym wywołaniu, które powinno przetworzyć ten sam łańcuch, \fIstr\fP musi być NULL. .P Argument \fIdelim\fP określa zbiór bajtów służących do oddzielania słów w przetwarzanym łańcuchu. Program wywołujący może podawać różne argumenty \fIdelim\fP w kolejnych wywołaniach przetwarzających ten sam łańcuch znaków. .P Każde wywołanie funkcji \fBstrtok\fP() zwraca wskaźnik do zakończonego znakiem null łańcuch zawierającego następne słowo. Łańcuch ten nie zawiera znaku separatora. Jeśli nie ma więcej słów, to \fBstrtok\fP() zwraca NULL. .P Sekwencja wywołań \fBstrtok\fP() działająca na tym samym łańcuchu znaków przechowuje wskaźnik określający punkt, od którego należy szukać kolejnego słowa. Pierwsze wywołanie \fBstrtok\fP() ustawia ten wskaźnik na pierwszy bajt łańcucha. Początek kolejnego słowa jest określany przez szukanie kolejnego bajtu niebędącego ogranicznikiem w \fIstr\fP. Jeśli taki bajt zostanie znaleziony, to jest uważany za początek kolejnego słowa. Jeśli nie ma takiego bajtu, to nie ma więcej słów i \fBstrtok\fP() zwraca NULL (Łańcuch, który jest pusty, lub taki, który zawiera tylko znaki ogranicznika, spowoduje, że pierwsze wywołanie \fBstrtok\fP() także zwróci NULL). .P Koniec każdego słowa jest określany przez wyszukanie albo następnego bajtu ogranicznika albo napotkanie kończącego bajtu null (\[aq]\[rs]0\[aq]). Jeśli zostanie znaleziony bajt ogranicznika, to jest nadpisywany znakiem null, tak aby zakończyć bieżące słowo, a \fBstrtok\fP() zachowuje wskaźnik do kolejnego bajtu; wskaźnik ten będzie użyty jako punkt startowy wyszukiwania kolejnego słowa. W takim przypadku \fBstrtok\fP() zwraca wskaźnik do początku znalezionego słowa. .P Z powyższego opisu wynika, że sekwencja dwóch lub więcej następujących po sobie bajtów ogranicznika w przetwarzanym łańcuchu jest uważana za pojedynczy ogranicznik i że ograniczniki na początku i końcu łańcucha są zawsze ignorowane. Innymi słowy: słowa zwracane przez \fBstrtok\fP() są zawsze niepustymi łańcuchami znaków. Dlatego na przykład kolejne wywołanie \fBstrtok\fP() dla łańcucha "\fIaaa;;bbb,\fP" z łańcuchem ograniczników "\fI;,\fP" zwrócą słowa "\fIaaa\fP" oraz "\fIbbb\fP", a następnie zwrócą wskaźnik null. .P Funkcja \fBstrtok_r\fP() jest wielowątkową wersją \fBstrtok\fP(). Argument \fIsaveptr\fP jest wskaźnikiem do zmiennej typu \fIchar\ *\fP, używanej wewnętrznie przez \fBstrtok_r\fP() do zachowania kontekstu pomiędzy kolejnymi wywołaniami przetwarzającymi ten sam łańcuch znaków. .P On the first call to \fBstrtok_r\fP(), \fIstr\fP should point to the string to be parsed, and the value of \fI*saveptr\fP is ignored (but see VERSIONS). In subsequent calls, \fIstr\fP should be NULL, and \fIsaveptr\fP (and the buffer that it points to) should be unchanged since the previous call. .P Różne łańcuchy znaków mogą być przetwarzane równocześnie przy użyciu sekwencji wywołań \fBstrtok_r\fP(), różniących się argumentami \fIsaveptr\fP. .SH "WARTOŚĆ ZWRACANA" Funkcje \fBstrtok\fP() i \fBstrtok_r\fP() zwracają wskaźnik do następnego słowa lub NULL, jeśli nie ma już więcej słów. .SH ATRYBUTY Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Interfejs Atrybut Wartość T{ .na .nh \fBstrtok\fP() T} Bezpieczeństwo wątkowe MT\-niebezpieczne race:strtok T{ .na .nh \fBstrtok_r\fP() T} Bezpieczeństwo wątkowe MT\-bezpieczne .TE .SH WERSJE .\" Tru64, according to its manual page W niektórych implementacjach, \fI*saveptr\fP musi wynosić NULL przy pierwszym wywołaniu do \fBstrtok_r\fP(), używanym do analizy \fIstr\fP. .SH STANDARDY .TP \fBstrtok\fP() C11, POSIX.1\-2008. .TP \fBstrtok_r\fP() POSIX.1\-2008. .SH HISTORIA .TP \fBstrtok\fP() POSIX.1\-2001, C89, SVr4, 4.3BSD. .TP \fBstrtok_r\fP() POSIX.1\-2001. .SH USTERKI Należy zachować ostrożność przy używaniu tych funkcji. Jeśli jednak zostaną użyte, to należy zauważyć, że: .IP \[bu] 3 Funkcje te modyfikują swój pierwszy argument. .IP \[bu] Funkcje te nie mogą być stosowane z ciągami stałymi. .IP \[bu] Tożsamość bajtu separatora jest tracona. .IP \[bu] Funkcja \fBstrtok\fP() korzysta ze statycznego bufora, więc nie jest przystosowana do wielowątkowości. Jeśli ma to znaczenie, należy używać \fBstrtok_r\fP(). .SH PRZYKŁADY Poniższy program używa zagnieżdżonych pętli, stosując \fBstrtok_r\fP() do podzielenia łańcucha na dwupoziomową hierarchię słów. Pierwszy argument linii poleceń określa łańcuch do przetworzenia. Drugi argument podaje bajty ograniczające używane do dzielenia łańcucha na \[Bq]główne\[rq] słowa. Trzeci argument określa bajty służące do dzielenia \[Bq]głównych\[rq] słów na podsłowa. .P Przykładowe wyjście programu jest następujące: .P .in +4n .EX $\fB ./a.out \[aq]a/bbb///cc;xxx:yyy:\[aq] \[aq]:;\[aq] \[aq]/\[aq]\fP 1: a/bbb///cc \-\-> a \-\-> bbb \-\-> cc 2: xxx \-\-> xxx 3: yyy \-\-> yyy .EE .in .SS "Kod źródłowy programu" .\" SRC BEGIN (strtok.c) \& .EX #include #include #include \& int main(int argc, char *argv[]) { char *str1, *str2, *token, *subtoken; char *saveptr1, *saveptr2; int j; \& if (argc != 4) { fprintf(stderr, "Użycie: %s łańcuch separ podsepar\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& for (j = 1, str1 = argv[1]; ; j++, str1 = NULL) { token = strtok_r(str1, argv[2], &saveptr1); if (token == NULL) break; printf("%d: %s\[rs]n", j, token); \& for (str2 = token; ; str2 = NULL) { subtoken = strtok_r(str2, argv[3], &saveptr2); if (subtoken == NULL) break; printf("\[rs]t \-\-> %s\[rs]n", subtoken); } } \& exit(EXIT_SUCCESS); } .EE .\" SRC END .P Inny przykładowy program używający \fBstrtok\fP() można znaleźć w \fBgetaddrinfo_a\fP(3). .SH "ZOBACZ TAKŻE" \fBmemchr\fP(3), \fBstrchr\fP(3), \fBstring\fP(3), \fBstrpbrk\fP(3), \fBstrsep\fP(3), \fBstrspn\fP(3), \fBstrstr\fP(3), \fBwcstok\fP(3) .PP .SH TŁUMACZENIE Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Paweł Wilk , Andrzej Krzysztofowicz , Robert Luberda i Michał Kułach . .PP Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License w wersji 3 .UE lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. .PP Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej .MT manpages-pl-list@lists.sourceforge.net .ME .