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 :

demande aide création fonction split


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 258
    Par défaut demande aide création fonction split
    Bonjour,

    Je cherche à créer une fonction split.

    Voici mon code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    temp=strtok(chaine,":");
    while (temp!=NULL)
    {
     coupure=strdup(temp);
     temp=strtok(NULL,":");
    }
    Je souhaite ensuite stocker les adresses de coupure dans un tableau comme ceci :

    [tableau 0]=1ère adresse coupure
    [tableau 1]=2éme adresse coupure
    etc ..
    la dernière entrée de tableau devant être NULL.

    c'est là que je bloque.

    Mes essais n'ont pas été fructueux.

    Je dois pas être loin de la solution.

    Merci pour votre aide.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    la fonction strtok() renvoit NULL s'il n'y a plus d'occurence du délimiteur ou qu'elle rencontre le terminateur de chaine, ça a tendance à nous arranger ici
    d'autre part on va troquer la boucle while(){...} pour une boucle do {...} while().

    on aurait alors quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    do {
       p = strtok(chaine, ":");
       tableau[i++] = p;
    } while (p != NULL)

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Attention à strtok() car elle utilise un pointeur statique pour mémoriser ses étapes (pour pouvoir repartir du même point lors de l'appel suivant). Ca marche jusqu'au moment où on veut l'appeler dans des boucles imbriquées comme par exemple exploiter un PATH avec ses ":" puis exploiter chaque chemin trouvé avec ses dossiers séparé par "/". Et là le truc s'envoie joyeusement en l'air.

    Il vaut mieux lui privilégier strtok_r() à laquelle on passe en 3° paramètre l'adresse d'un pointeur dédié à la sauvegarde de l'état en cours. On peut alors, dans le cas d'appels imbriqués, utiliser différents pointeurs de travail...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 258
    Par défaut
    Merci pour vos réponses.
    @sven : dans mon cas pas de prob. strtok ou strtok_r répond à mon besoin.

    Je n'ai pas de soucis avec strtok, je récupère bien toutes les occurrences dans temp et recopiés via dtrdup dans mon pointeur nommé coupure.

    @bufferbob : je vais tester ton bout de code, à vu d'oeil, ça me parait bon.

    je vous tiens au courant.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Je n'ai pas de soucis avec strtok
    Oui parce que là tu ne l'appeles qu'une seule fois et ta fonction traite toute la boucle strtok() avant de sortir.

    Appelles-là dans cette configuration
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    chemin=strtok(path, ":")
    while (chemin != NULL)
    {
        dossier=strtok(chemin, "/")
        while (dossier != NULL)
        {
            ...
           dossier=strtok(NULL, "/")
        }
        chemin=strtok(NULL, ":")
    }

    Et tu verras comment ton truc partira dans le décors...

    Citation Envoyé par chrtophe Voir le message
    ...et recopiés via strdup dans mon pointeur nommé coupure.
    Pourquoi dupliquer les chaines ? La solution de bufferBob est plus sympa (il stocke les pointeurs de la chaine d'origine et non de nouvelles chaines recopiées).
    Ceci dit, si vraiment c'est utile (modif ultérieure etc) il te faudra bien penser à les libérer en fin de travail...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 258
    Par défaut
    oui Sve@r,

    ce que je voulais dire, c'est que je ne suis pas dans cette config, je peux donc utiliser soit l'un soit l'autre. Mais sur le principe tu as raison, il suffit que je change mon code on faisant des imbrications et je devrais remplacer strtok par strtok_r.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

Discussions similaires

  1. Aide création fonction avec sqsh
    Par skull75 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 19/07/2012, 10h21
  2. Demande aide (debutant) => Fonctions
    Par Invité dans le forum C
    Réponses: 5
    Dernier message: 15/11/2009, 20h12
  3. besoin d'aide pour fonction split
    Par remitbo dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/06/2009, 12h45
  4. [JS] Aide création Fonction
    Par Pahcixam dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/02/2007, 18h40

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