Provided by: manpages-fr-dev_3.32d0.2p4-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    de    macros    de   test   de   fonctionnalités   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  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

       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.

       * 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  ci-dessous  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.

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

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

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.32 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis    2010,    cette   traduction   est   maintenue   à   l'aide   de   l'outil   po4a
       <URL:http://po4a.alioth.debian.org/> par l'équipe 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 François et l'équipe francophone  de
       traduction de Debian (2006-2009).

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