Provided by: manpages-ro-dev_4.28.0-2_all 

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ță │ Atribut │ Valoare │
├───────────────────────────────────────────────────────────┼───────────────────┼───────────────────────┤
│ 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)