Loading

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 (voir
   feature_test_macros(7)) :

       strtok_r() : _SVID_SOURCE || _BSD_SOURCE || _POSIX_C_SOURCE >= 1 ||
       _XOPEN_SOURCE || _POSIX_SOURCE

       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);
       } /* main */

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