Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Fonction strtok

La fonction strstr La fonction strxfrm


Entête à inclure

#include <string.h>  // <cstring> en C++

Fonction strtok

char * strtok( char * string, const char * delimiters );                       // Avant C99
char * strtok( char * restrict string, const char * restrict delimiters );     // A partir de C99

Cette fonction permet d'extraire, un à un, tous les éléments syntaxiques (les tokens) d'une chaîne de caractères. Pour contrôler ce qui doit être extrait, vous devez spécifier l'ensemble des caractères pouvant faire office de séparateurs de tokens.

Pour extraire tous les tokens, vous devez invoquer autant de fois que nécessaire la fonction strtok. Lors du premier appel vous devez passer la chaîne à découper ainsi que la liste des séparateurs. En retour, vous récupérerez le premier token. Ensuite, vous ne devrez plus repasser la chaîne à découper. A la place, il faudra fournir un pointeur nul (NULL) et vous récupérerez le token suivant.

l'utilisation de cette fonction peut s'avérer être dangereuse ! Si vous l'utilisez, il faut savoir que :

Paramètres

Valeur de retour

Si un token est encore disponible, la fonction strtok renvoie ce nouveau token. Dans le cas contraire, la fonction renvoi un pointeur nul (NULL).

Exemple de code

L'exemple de code suivant extrait tous les mots présents dans un chaîne de caractères initiale.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main() {

    // La chaine de caractères à traiter.
    char str[] = "- Voici une phrase avec quelques séparateurs ! -";
    // La définitions de séparateurs connus.
    const char * separators = " ,.-!";

    // On cherche à récupérer, un à un, tous les mots (token) de la phrase
    // et on commence par le premier.
    char * strToken = strtok ( str, separators );
    while ( strToken != NULL ) {
        printf ( "%s\n", strToken );
        // On demande le token suivant.
        strToken = strtok ( NULL, separators );
    }

    return EXIT_SUCCESS;
}
Exemple d'utilisation de fonction strpbrk
la variable strToken est pointeur vers le token en cours d'extraction. En fait, on pointe bien à l'intérieur de la chaîne de caractères initiale. Il ne faut donc surtout pas chercher à libérer la mémoire ciblée par strToken via un appel à la fonction free.
l'instruction char str[] = "- Voici une phrase avec quelques séparateurs ! -"; crée une copie de la chaîne de caractères initiale et constante, dans la pile d'exécution (la stack, en anglais). Il ne faut surtout pas remplacer cette instruction par char * str = "- Voici une phrase avec quelques séparateurs ! -"; : la zone de mémoire pointée serait constante et la fonction strtok planterait systématiquement (« segmentation fault » sous Linux/Unix).

Et voici le résultat produit par cet exemple :

$> gcc -o sample sample.c
$> ./sample
Voici
une
phrase
avec
quelques
séparateurs
$>

Sujets connexes

strcat
strchr
strcpy
strlen
strpbrk
strrchr
strstr


La fonction strstr La fonction strxfrm