.\" -*- coding: UTF-8 -*-
'\" t
.\" Copyright (C) 2005, 2013 Michael Kerrisk <mtk.manpages@gmail.com>
.\" 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 <nick@debian.org>
.\" 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 "5 lutego 2023 r." "Linux man\-pages 6.03" 
.SH NAZWA
strtok, strtok_r \- wydzielanie słów z łańcuchów
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <string.h>\fP
.PP
\fBchar *strtok(char *restrict \fP\fIstr\fP\fB, const char *restrict \fP\fIdelim\fP\fB);\fP
\fBchar *strtok_r(char *restrict \fP\fIstr\fP\fB, const char *restrict \fP\fIdelim\fP\fB,\fP
\fB               char **restrict \fP\fIsaveptr\fP\fB);\fP
.fi
.PP
.RS -4
Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)):
.RE
.PP
\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.
.PP
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.
.PP
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.
.PP
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).
.PP
The end of each token is found by scanning forward until either the next
delimiter byte is found or until the terminating null byte (\[aq]\e0\[aq])
is encountered.  If a delimiter byte is found, it is overwritten with a null
byte to terminate the current token, and \fBstrtok\fP()  saves a pointer to the
following byte; that pointer will be used as the starting point when
searching for the next token.  In this case, \fBstrtok\fP()  returns a pointer
to the start of the found token.
.PP
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.
.PP
The \fBstrtok_r\fP()  function is a reentrant version of \fBstrtok\fP().  The
\fIsaveptr\fP argument is a pointer to a \fIchar\~*\fP variable that is used
internally by \fBstrtok_r\fP()  in order to maintain context between successive
calls that parse the same string.
.PP
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 NOTES).  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.
.PP
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).
.ad l
.nh
.TS
allbox;
lbx lb lb
l l l.
Interfejs	Atrybut	Wartość
T{
\fBstrtok\fP()
T}	Bezpieczeństwo wątkowe	MT\-Unsafe race:strtok
T{
\fBstrtok_r\fP()
T}	Bezpieczeństwo wątkowe	MT\-Safe
.TE
.hy
.ad
.sp 1
.SH STANDARDY
.TP 
\fBstrtok\fP()
POSIX.1\-2001, POSIX.1\-2008, C99, SVr4, 4.3BSD.
.TP 
\fBstrtok_r\fP()
POSIX.1\-2001, POSIX.1\-2008.
.SH UWAGI
.\" Tru64, according to its manual page
On some implementations, \fI*saveptr\fP is required to be NULL on the first
call to \fBstrtok_r\fP()  that is being used to parse \fIstr\fP.
.SH BŁĘDY
Nigdy nie należy używać 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 ta nie mogą być stosowana 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 "główne" słowa. Trzeci
argument określa bajty służące do dzielenia "głównych" słów na podsłowa.
.PP
Przykładowe wyjście programu jest następujące:
.PP
.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 <stdio.h>
#include <stdlib.h>
#include <string.h>

int
main(int argc, char *argv[])
{
    char *str1, *str2, *token, *subtoken;
    char *saveptr1, *saveptr2;
    int j;

    if (argc != 4) {
        fprintf(stderr, "Użycie: %s string delim subdelim\en",
                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\en", j, token);

        for (str2 = token; ; str2 = NULL) {
            subtoken = strtok_r(str2, argv[3], &saveptr2);
            if (subtoken == NULL)
                break;
            printf("\et \-\-> %s\en", subtoken);
        }
    }

    exit(EXIT_SUCCESS);
}
.EE
.\" SRC END
.PP
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 <siefca@pl.qmail.org>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>,
Robert Luberda <robert@debian.org>
i
Michał Kułach <michal.kulach@gmail.com>
.
.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 .
