IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

pb fonction strtok


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 42
    Points : 21
    Points
    21
    Par défaut pb fonction strtok
    Bonjour,

    J'aurais besoin d'une petite explication concernant un problème que j'ai rencontré avec la fonction strtok.

    J'ai ces deux codes qui ne diffèrent que par l'initialisation de str, dans le premier cas j'utilise un pointeur, dans le second cas je met des crochets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <stdio.h>
    #include <stdlib.h>
    #include <dirent.h>
     
    int main()
    {
        char *str="b/o/n/j/o/u/r";
     
        char delims[] = "/";
        char *result = NULL;
        result = strtok( str, delims );
        while( result != NULL )
        {
            printf( "result is \"%s\"\n", result );
            result = strtok( NULL, delims );
        }
     
        return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <stdio.h>
    #include <stdlib.h>
    #include <dirent.h>
     
    int main()
    {
        char str[]="b/o/n/j/o/u/r";
     
        char delims[] = "/";
        char *result = NULL;
        result = strtok( str, delims );
        while( result != NULL )
        {
            printf( "result is \"%s\"\n", result );
            result = strtok( NULL, delims );
        }
     
        return 0;
    }
    Le premier code donne une erreur de segmentation le second fonctionne, j'aurais aimé savoir pourquoi ?

    J'ai pensé qu'il pouvais s'agir du fait que strtok modifie la chaine mais je n'en suis pas sûr.

    Merci à ceux qui m'apporterons leur aide.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Cette fonction modifie la chaine dont on lui demande d'extraire les tokens ; elle rajoute des '\0' au fur et à mesure qu'on l'appelle.

    Or, lorsque tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *str="b/o/n/j/o/u/r";
    ton pointeur pointe sur une chaine constante, qui est en lecture seule. Si tu essayes d'en modifier un caractère, ça plante.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *str="b/o/n/j/o/u/r";
    *str = 'a'; /* BOUM !*/
    Par contre, quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char str[]="b/o/n/j/o/u/r";
    tu créées un tableau sur la pile, qui est initialisé avec la chaine "b/o/n/j/o/u/r", ce qui fait que tu peux le modifier.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Ok merci beaucoup, je ne connaissais pas cette subtilité.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fonction strtok manquante
    Par Bayard dans le forum C
    Réponses: 3
    Dernier message: 10/06/2007, 12h34
  2. [NASM] Programmation fonction strtok
    Par moustiks dans le forum Assembleur
    Réponses: 4
    Dernier message: 15/01/2007, 09h30
  3. Fonction strtok
    Par benjiprog dans le forum C
    Réponses: 7
    Dernier message: 21/03/2006, 20h38
  4. Fonction strtok et récupération des fragments
    Par GarGamel55 dans le forum Langage
    Réponses: 7
    Dernier message: 18/02/2006, 19h27
  5. du mal à comprendre la fonction strtok
    Par thierry_b dans le forum C
    Réponses: 2
    Dernier message: 25/11/2005, 10h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo