Date création : 27-03-2008 20:23:44
 Vous êtes dans : GNU/Linux Astuces / Pages man [Section3 - Sous-fonctions]
STRTOK
Index
- NOM
- SYNOPSIS
- DESCRIPTION
- EXEMPLE
- BOGUES
- VALEUR RENVOYÉE
- CONFORMITÉ
- VOIR AUSSI
- TRADUCTION
NOM
strtok, strtok_r - Extraire des mots d'une chaîne
SYNOPSIS
#include <string.h>
char *strtok (char *str, const char *delim);
char *strtok_r (char *str, const char *delim, char **saveptr);
DESCRIPTION
La fonction strtok() scinde une chaîne en une séquence d'éléments
lexicaux. 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 delimit spécifie l'ensemble des caractères qui délimitent les
éléments dans la chaîne à analyser. La chaîne de séparateurs delimit 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 nul, contenant l'élément suivant. Cette chaîne n'inclut pas le
séparateur. S'il n'y a plus d'éléments, strtok renvoie NULL.
Une séquence, dans la chaîne à analyser, de deux séparateurs contigus ou
plus est considérée comme un seul séparateur. Les séparateurs en début et en
fin de chaîne sont ignorés. Les éléments renvoyés par strtok() sont
toujours des chaînes non vides.
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 à 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. Dans les appels suivants,
str doit être NULL et saveptr 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 séquences d'appels à strtok_r() qui spécifient différents
arguments saveptr.
EXEMPLE
Le programme suivant utilise des boucles imbriquées qui utilisent
strtok_r() pour scinder une chaîne en une hiérarchie d'éléments à deux
niveaux. Le premier argument de la ligne de commande spécifie la chaîne à
analyser. Le second argument spécifie le(s) séparateur(s) utilisé(s) pour
séparer la chaîne en éléments « majeurs ». Le troisième argument spécifie
le(s) séparateur(s) utilisé(s) pour séparer les éléments « majeurs » en
sous-éléments.
#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
",
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, j, token);
for (str2 = token; ; str2 = NULL) {
subtoken = strtok_r(str2, argv[3], &saveptr2);
if (subtoken == NULL)
break;
printf(" --> %s, subtoken);
}
}
exit(EXIT_SUCCESS);
} /* main */
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
BOGUES
Évitez au maximum d'utiliser cette fonction. Sinon, prenez note des
informations suivantes :
-
Cette fonction modifie son premier argument.
Les caractères de séparation sont surchargés, leur identité est donc perdue.
Cette fonction ne doit pas être invoquée sur une chaîne constante.
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().
VALEUR RENVOYÉE
Les fonctions strtok() et strtok_r() renvoient un pointeur sur
l'élément lexical suivant, ou NULL s'il n'y en a plus.
CONFORMITÉ
- strtok()
-
SVr4, POSIX.1-2001, BSD 4.3, C89.
- strtok_r()
-
POSIX.1-2001
VOIR AUSSI
index(3), memchr(3), rindex(3), strchr(3), strpbrk(3),
strsep(3), strspn(3), strstr(3), wcstok(3)
TRADUCTION
Cette page de manuel a été traduite et mise à jour par
Christophe Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003,
puis par Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006.
La traduction de cette page de manuel est basée sur les traductions
disponibles sur http://manpagesfr.free.fr/,
mais est gérée par l'équipe francophone de traduction de Debian
au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction par un rapport de bogue sur
le paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document en
utilisant la commande
« man -L C <section> <page_de_man> ».
|