Man page - strtok_r(3)

Packages contains this manual

Available languages:

en fr pl ja ru ro

Manual

strtok

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ATTRIBUTS
VERSIONS
STANDARDS
HISTORIQUE
BOGUES
EXEMPLES
Source du programme
VOIR AUSSI
TRADUCTION

NOM

strtok, strtok_r - Extraire des sĂ©quences d’une chaĂźne

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#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 );

Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros (7)) :

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

DESCRIPTION

La fonction strtok () scinde une chaĂźne en une suite de zĂ©ro ou plusieurs sĂ©quences non vides. Lors du premier appel Ă  strtok (), la chaĂźne Ă  scinder doit ĂȘtre spĂ©cifiĂ©e dans str . Dans chaque appel ultĂ©rieur fait pour analyser la mĂȘme chaĂźne, str doit ĂȘtre NULL.

L’argument delim indique l’ensemble des octets qui dĂ©limitent les sĂ©quences dans la chaĂźne Ă  analyser. La chaĂźne de sĂ©parateurs delim peut ĂȘtre diffĂ©rente Ă  chaque appel sur la mĂȘme chaĂźne.

Chaque appel Ă  strtok () renvoie un pointeur sur une chaĂźne terminĂ©e par un octet NULL contenant la sĂ©quence suivante. Cette chaĂźne n’inclut pas le sĂ©parateur. S’il n’y a plus de sĂ©quences, strtok renvoie NULL.

Une suite d’appels Ă  strtok () qui s’exĂ©cute sur la mĂȘme chaĂźne gĂšre un pointeur qui indique le point de dĂ©part de la recherche pour la sĂ©quence suivante. Le premier appel Ă  strtok () positionne ce pointeur sur le premier octet de la chaĂźne. Le dĂ©but de la sĂ©quence suivante est dĂ©terminĂ© en parcourant str jusqu’à l’octet suivant qui ne soit pas un sĂ©parateur. Lorsqu’un tel octet est rencontrĂ©, il est pris comme point de dĂ©part de la sĂ©quence suivante. Si aucun octet n’est trouvĂ© qui ne soit pas un sĂ©parateur, alors il n’y a plus de sĂ©quence dans la chaĂźne et strtok () renvoie NULL. (Ainsi, pour une chaĂźne vide ou qui ne contient que des sĂ©parateurs, strtok () renverra NULL dĂšs le premier appel).

La fin de chaque sĂ©quence est dĂ©terminĂ©e en parcourant la chaĂźne jusqu’à ce que l’octet suivant soit un dĂ©limiteur, ou jusqu’à ce qu’on rencontre l’octet NULL final (« \0 »). Si un dĂ©limiteur est trouvĂ©, il est Ă©crasĂ© par un octet NULL pour signifier la fin de la sĂ©quence en cours de dĂ©termination, et strtok () positionne un pointeur sur l’octet suivant ; ce pointeur marque le point de dĂ©part de la recherche de la sĂ©quence suivante. Dans ce cas, strtok () renvoie un pointeur vers le dĂ©but de la sĂ©quence qui vient d’ĂȘtre isolĂ©e.

De ce qui prĂ©cĂšde, il dĂ©coule qu’une suite de deux sĂ©parateurs contigus ou plus est considĂ©rĂ©e comme un seul sĂ©parateur et que les sĂ©parateurs en dĂ©but et en fin de chaĂźne sont ignorĂ©s. Les sĂ©quences renvoyĂ©es par strtok () sont toujours des chaĂźnes non vides. Si l’on considĂšre par exemple la chaĂźne « aaa;;bbb, », les appels successifs Ă  strtok () pour lequel le sĂ©parateur serait « ;, » renverraient les chaĂźnes « aaa » et « bbb », puis un pointeur NULL.

La fonction strtok_r () est la version rĂ©entrante de la fonction strtok (). L’argument saveptr est un pointeur sur une variable char * utilisĂ©e de maniĂšre interne par strtok_r () afin de maintenir le contexte entre les appels successifs qui analysent la mĂȘme chaĂźne.

Au premier appel de strtok_r (), str doit pointer sur la chaĂźne Ă  analyser et la valeur de *saveptr est ignorĂ©e (mais consultez VERSIONS). Dans les appels suivants, str doit ĂȘtre NULL et saveptr (et le tampon vers lequel il pointe) ne doit pas ĂȘtre modifiĂ© depuis le prĂ©cĂ©dent appel.

DiffĂ©rentes chaĂźnes peuvent ĂȘtre analysĂ©es de maniĂšre concurrente en utilisant des suites d’appels Ă  strtok_r () qui spĂ©cifient diffĂ©rents arguments saveptr .

VALEUR RENVOYÉE

Les fonctions strtok () et strtok_r () renvoient un pointeur sur la sĂ©quence suivante, ou NULL s’il n’y en a plus.

ATTRIBUTS

Pour une explication des termes utilisés dans cette section, consulter attributes (7).

Image grohtml-3896002-1.png

VERSIONS

Pour plusieurs implĂ©mentations, *saveptr doit ĂȘtre NULL lors du premier appel Ă  strtok_r () utilisĂ© pour analyser str .

STANDARDS

strtok ()

C11, POSIX.1-2008.

strtok_r ()

POSIX.1-2008.

HISTORIQUE

strtok ()

POSIX.1-2001, C89, SVr4, 4.3BSD.

strtok_r ()

POSIX.1-2001.

BOGUES

Faites attention quand vous utilisez ces fonctions. Si vous les utilisez, prenez note des informations suivantes :

-

Ces fonctions modifient leur premier paramĂštre.

-

Ces fonctions ne peuvent pas ĂȘtre utilisĂ©es avec des chaĂźnes constantes.

-

L’identitĂ© du dĂ©limiteur est perdue.

-

La fonction strtok () utilise un tampon statique et n’est donc pas sĂ»re dans un contexte multithread. Dans ce cas, il vaut mieux utiliser strtok_r ().

EXEMPLES

Le programme ci-dessous utilise des boucles imbriquées qui utilisent strtok_r () pour scinder une chaßne en une hiérarchie de séquences à deux niveaux. Le premier argument de la ligne de commande indique la chaßne à analyser. Le second argument indique le ou les séparateurs utilisés pour séparer la chaßne en séquences « majeures ». Le troisiÚme argument indique le ou les séparateurs utilisés pour séparer les séquences « majeures » en sous-séquences.

Voici un exemple de la sortie produite par ce programme :

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

Source du programme

#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, "Utilisation : %s string delim subdelim\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, token);
for (str2 = token; ; str2 = NULL) {
subtoken = strtok_r(str2, argv[3], &saveptr2);
if (subtoken == NULL)
break;
printf("\t --> %s\n", subtoken);
}
}
exit(EXIT_SUCCESS);
}

Un autre exemple de programme qui utilise strtok () se trouve dans getaddrinfo_a (3).

VOIR AUSSI

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

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Frédéric Hantrais <fhantrais@gmail.com> et Grégoire Scano <gregoire.scano@malloc.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .