Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

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