Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
NOM
strtok, strtok_r - Extraire des mots d'une chaine
SYNOPSIS
#include <string.h>
char *strtok(char *str, const char *delim);
char *strtok_r(char *str, const char *delim, char **saveptr);
Exigences de macros de test de fonctionnalites pour la glibc (consultez
feature_test_macros(7)) :
strtok_r() : _SVID_SOURCE || _BSD_SOURCE || _POSIX_C_SOURCE >= 1 ||
_XOPEN_SOURCE || _POSIX_SOURCE
DESCRIPTION
La fonction strtok() scinde une chaine en une sequence d'elements
lexicaux. Lors du premier appel a strtok(), la chaine a scinder doit
etre specifiee dans str. Dans chaque appel ulterieur fait pour analyser
la meme chaine, str doit etre NULL.
L'argument delimit specifie l'ensemble des caracteres qui delimitent
les elements dans la chaine a analyser. La chaine de separateurs
delimit peut etre differente a chaque appel sur la meme chaine.
Chaque appel a strtok() renvoie un pointeur sur une chaine, terminee
par un octet nul, contenant l'element suivant. Cette chaine n'inclut
pas le separateur. S'il n'y a plus d'elements, strtok renvoie NULL.
Une sequence, dans la chaine a analyser, de deux separateurs contigus
ou plus est consideree comme un seul separateur. Les separateurs en
debut et en fin de chaine sont ignores. Les elements renvoyes par
strtok() sont toujours des chaines non vides.
La fonction strtok_r() est la version reentrante de la fonction
strtok(). L'argument saveptr est un pointeur sur une variable char *
utilisee de maniere interne a strtok_r() afin de maintenir le contexte
entre les appels successifs qui analysent la meme chaine.
Au premier appel de strtok_r(), str doit pointer sur la chaine a
analyser et la valeur de saveptr est ignoree. Dans les appels suivants,
str doit etre NULL et saveptr ne doit pas etre modifie depuis le
precedent appel.
Differentes chaines peuvent etre analysees de maniere concurrente en
utilisant des sequences d'appels a strtok_r() qui specifient differents
arguments saveptr.
VALEUR RENVOY'EE
Les fonctions strtok() et strtok_r() renvoient un pointeur sur
l'element lexical suivant, ou NULL s'il n'y en a plus.
CONFORMIT'E
strtok()
SVr4, POSIX.1-2001, BSD 4.3, C89, C99.
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 parametre.
* Ces fonctions ne peuvent pas etre utilisees avec des chaines
constantes.
* Cette fonction ne doit pas etre invoquee sur une chaine constante.
* La fonction strtok() utilise un tampon statique et n'est donc pas
sure dans un contexte multithread. Dans ce cas, il vaut mieux
utiliser strtok_r().
EXEMPLE
Le programme ci-dessous utilise des boucles imbriquees qui utilisent
strtok_r() pour scinder une chaine en une hierarchie d'elements a deux
niveaux. Le premier argument de la ligne de commande specifie la chaine
a analyser. Le second argument specifie le(s) separateur(s) utilise(s)
pour separer la chaine en elements << majeurs >>. Le troisieme argument
specifie le(s) separateur(s) utilise(s) pour separer les elements
<< majeurs >> en sous-elements.
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, "Usage: %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(" --> %s\n", subtoken);
}
}
exit(EXIT_SUCCESS);
} /* main */
VOIR AUSSI
index(3), memchr(3), rindex(3), strchr(3), string(3), strpbrk(3),
strsep(3), strspn(3), strstr(3), wcstok(3)
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Nicolas
Francois et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.