Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       strtok, strtok_r - extrage simboluri din șiruri

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <string.h>

       char *strtok(char *_Nullable restrict str, const char *restrict delim);
       char *strtok_r(char *_Nullable restrict str, const char *restrict delim,
                      char **restrict saveptr);

   Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

       strtok_r():
           _POSIX_C_SOURCE
               || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

DESCRIERE

       Funcția  strtok()  descompune un șir de caractere într-o secvență de zero sau mai multe simboluri nevide.
       La primul apel la strtok(), șirul de caractere care  trebuie  analizat  trebuie  specificat  în  str.  În
       fiecare apel ulterior care ar trebui să analizeze același șir de caractere, str trebuie să fie NULL.

       Argumentul  delim  specifică  un set de octeți care delimitează simbolurile din șirul analizat. Apelantul
       poate specifica șiruri diferite în delim în apeluri succesive care analizează același șir.

       Fiecare apel la strtok() returnează un indicator către un șir cu terminație nulă care  conține  următorul
       simbol.  Acest  șir  nu  include  octetul  de  delimitare. Dacă nu se mai găsesc alte simboluri, strtok()
       returnează NULL.

       O secvență de apeluri la strtok() care operează asupra aceluiași șir de caractere  menține  un  indicator
       care  determină punctul de la care începe căutarea următorului simbol. Primul apel la strtok() stabilește
       acest indicator la primul octet al șirului de caractere. Începutul  următorului  simbol  este  determinat
       prin  scanarea înainte pentru următorul octet nedelimitator din str.  Dacă se găsește un astfel de octet,
       acesta este considerat ca fiind începutul următorului simbol.  Dacă nu se găsește  un  astfel  de  octet,
       atunci  nu  mai  există alte simboluri, iar strtok() returnează NULL.  (Un șir de caractere care este gol
       sau care conține numai delimitatori va face astfel ca strtok() să returneze NULL la primul apel).

       Sfârșitul fiecărui simbol este găsit prin scanarea înainte până când este găsit fie  următorul  octet  de
       delimitare,  fie  octetul  nul  de  terminare ('\0'). În cazul în care se găsește un octet de delimitare,
       acesta este suprascris cu un octet nul pentru  a  încheia  simbolul  curent,  iar  strtok()  salvează  un
       indicator  la următorul octet; acest indicator va fi utilizat ca punct de plecare la căutarea următorului
       simbol. În acest caz, strtok() returnează un indicator la începutul simbolului găsit.

       Din descrierea de mai sus, rezultă că o secvență de doi sau mai mulți  octeți  delimitatori  contigui  în
       șirul analizat este considerată a fi un singur delimitator și că octeții delimitatori de la începutul sau
       sfârșitul  șirului  sunt ignorați. Altfel spus: simbolurile returnate de strtok() sunt întotdeauna șiruri
       de caractere nevide. Astfel, de exemplu, având  în  vedere  șirul  „aaa;;bbb,”,  apelurile  succesive  la
       strtok()  care specifică șirul delimitator „;,” ar returna șirurile „aaa” și „bbb”, iar apoi un indicator
       nul.

       Funcția strtok_r() este o versiune reentrantă a strtok(). Argumentul saveptr este un  indicator  către  o
       variabilă  char *  care  este  utilizată  intern de strtok_r() pentru a menține contextul între apelurile
       succesive care analizează același șir de caractere.

       La primul apel la strtok_r(), str trebuie să indice șirul de caractere care urmează să fie analizat,  iar
       valoarea  lui *saveptr este ignorată (dar a se vedea secțiunea VERSIUNI). În apelurile ulterioare, str ar
       trebui să fie NULL, iar saveptr (și memoria tampon către care acesta indică) ar trebui să fie neschimbată
       de la apelul anterior.

       Diferite șiruri de caractere pot fi analizate concomitent folosind secvențe de apeluri la strtok_r() care
       specifică diferite argumente saveptr.

VALOAREA RETURNATĂ

       Funcțiile strtok() și strtok_r() returnează un indicator către următorul simbol, sau  NULL  dacă  nu  mai
       există simboluri.

ATRIBUTE

       Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
       ┌───────────────────────────────────────────────────────────┬───────────────────┬───────────────────────┐
       │ InterfațăAtributValoare               │
       ├───────────────────────────────────────────────────────────┼───────────────────┼───────────────────────┤
       │ strtok()                                                  │ Siguranța firelor │ MT-Unsafe race:strtok │
       ├───────────────────────────────────────────────────────────┼───────────────────┼───────────────────────┤
       │ strtok_r()                                                │ Siguranța firelor │ MT-Safe               │
       └───────────────────────────────────────────────────────────┴───────────────────┴───────────────────────┘

VERSIUNI

       În  unele  implementări,  *saveptr  trebuie  să  fie NULL la primul apel la strtok_r() care este utilizat
       pentru a analiza str.

STANDARDE

       strtok()
              C11, POSIX.1-2008.

       strtok_r()
              POSIX.1-2008.

ISTORIC

       strtok()
              POSIX.1-2001, C89, SVr4, 4.3BSD.

       strtok_r()
              POSIX.1-2001.

ERORI

       Fiți precaut atunci când utilizați aceste funcții. Dacă le utilizați, rețineți că:

       •  Aceste funcții modifică primul lor argument.

       •  Aceste funcții nu pot fi utilizate pe șiruri constante.

       •  Identitatea octetului de delimitare este pierdută.

       •  Funcția strtok() utilizează o memorie tampon statică în timpul analizei, deci nu  este  sigură  pentru
          fire. Utilizați strtok_r() dacă acest lucru este important pentru dumneavoastră.

EXEMPLE

       Programul  de  mai  jos  folosește  bucle imbricate care utilizează strtok_r() pentru a împărți un șir de
       caractere într-o ierarhie de simboluri pe două niveluri. Primul argument din linia de  comandă  specifică
       șirul  de  caractere  care  urmează  să  fie  analizat.  Al  doilea  argument specifică octetul (octeții)
       delimitator(i) care urmează să fie utilizați pentru a separa șirul  în  simboluri  „majore”.  Al  treilea
       argument  specifică  octetul  (octeții) delimitator(i) care trebuie utilizați pentru a separa simbolurile
       „majore” în sub-simboluri.

       Un exemplu de ieșire produsă de acest program este următorul:

           $ ./a.out 'a/bbb///cc;xxx:yyy:' ':;' '/'
           1: a/bbb///cc
                    --> a
                    --> bbb
                    --> cc
           2: xxx
                    --> xxx
           3: yyy
                    --> yyy

   Sursa programului

       #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, "Utilizare: %s șir delimitator sub-delimitator\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\n", j, simbol);

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

           exit(EXIT_SUCCESS);
       }

       Un alt exemplu de program care utilizează strtok() poate fi găsit în getaddrinfo_a(3).

CONSULTAȚI ȘI

       memchr(3), strchr(3), string(3), strpbrk(3), strsep(3), strspn(3), strstr(3), wcstok(3)

TRADUCERE

       Traducerea   în   limba   română   a   acestui   manual   a   fost   făcută   de   Remus-Gabriel    Chelu
       <remusgabriel.chelu@disroot.org>

       Această  traducere  este  documentație  gratuită;  citiți  Licența publică generală GNU Versiunea 3 sau o
       versiune  ulterioară  cu  privire  la  condiții  privind  drepturile  de  autor.   NU  se   asumă   NICIO
       RESPONSABILITATE.

       Dacă  găsiți  erori  în  traducerea  acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
       ro@lists.sourceforge.net.

Pagini de manual de Linux 6.9.1                   16 iunie 2024                                        strtok(3)