Provided by: manpages-fr-dev_2.80.1-1_all bug

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

   Exigences  pour les macros de test de fonctionnalité de la glibc (consultez
   feature_test_macros(7)) :

       strtok_r() : _SVID_SOURCE || _BSD_SOURCE || _POSIX_C_SOURCE ||
       _XOPEN_SOURCE

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.

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, C99.

       strtok_r()
              POSIX.1-2001

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().

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\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 */

       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

VOIR AUSSI

       index(3),   memchr(3),  rindex(3),  strchr(3),  strpbrk(3),  strsep(3),
       strspn(3), strstr(3), wcstok(3)

COLOPHON

       Cette page fait partie de  la  publication  2.80  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      être       trouvées       à       l’adresse
       http://www.kernel.org/doc/man-pages/.

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, et mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement         gérées         par         Nicolas         François
       <nicolas.francois@centraliens.net>   et   l’équipe    francophone    de
       traduction de Debian.

       Veuillez   signaler   toute   erreur   de   traduction  en  écrivant  à
       <debian-l10n-french@lists.debian.org> ou 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> ».