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 :

Extraction de sous-chaine dans une chaine


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 62
    Points : 59
    Points
    59
    Par défaut Extraction de sous-chaine dans une chaine
    Bonjour,
    Je voudrais extraire une sous-chaine d'une chaine, à partir de ses positions extremes. par-exemple avec la chaine "chaine" (original, non?) et lles valeurs 1, 3, je souhaite obtenir, "hai". Seulement, je n'ai pas accès à substr.
    J'ai fait un petit code tout simple mais erroné...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char * Dup=strdup(chaine);
    Dup[max]='\0';
    Dup=Dup+min;
    free(Dup);
    Seulement, ca plante au free . Il y a surement une raison mais laquelle?
    Merci pour votre aide.
    Matthieu

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    Normal char *Dup est un pointeur,
    Dup=Dup+min; modifie l'adresse du pointeur donc de Dup
    ensuite tu "free" la nouvelle qui n'a jamais etait alloué !
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 62
    Points : 59
    Points
    59
    Par défaut
    Merci marcG!
    Oui, c'est vrai
    Mais comment puis-je faire? (je suis pas un expert avec la gestion de la memoire... Ca se voit, ah bon?) Il faut que je definisse une nouvelle char * que je fais pointer sur Dup+min?

    Merci
    Matthieu

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    Oui c'est une solution
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 62
    Points : 59
    Points
    59
    Par défaut
    Donc du coup, j'ai fait un truc comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char * Dup=strdup(chaine);
    char * Dup2=Dup+min;
    Dup2[max-min]='\0'; 
    free(Dup);
    Ca ne plante pas, c'est deja ca. Est-ce que c'est bon au niveau des alloc et desalloc?
    Merci

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    Heuu non y a pas vraiment de difference quand tu "free" Dup, Dup2 et du coup "free" aussi : c'est la même zone memoire juste pointé a qq octet du debut !
    il te faut alloué une autre zone donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <string.h>
    #include <malloc.h>
    #include <stdlib.h>
    ......
     
    Dup2 = (char *)malloc((max-min)+1);
    /* puis copier le buffer*/
    memcpy( Dup2, Dup, (size_t)(max-min) );
    Dup2[max-min]='\0';
    free(Dup);
     
     
    /* apres usage ne pas oublier le free(Dup2) */
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 62
    Points : 59
    Points
    59
    Par défaut
    Merci beaucoup Marc!
    Que ferais-je sans toi !
    Matthieu

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Extraction de sous-chaine dans une chaine
    Citation Envoyé par ma2th
    Je voudrais extraire une sous-chaine d'une chaine, à partir de ses positions extremes. par-exemple avec la chaine "chaine" (original, non?) et lles valeurs 1, 3, je souhaite obtenir, "hai". Seulement, je n'ai pas accès à substr.
    strncat() peut aider. Fait de ton mieux, et poste ton code.
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. Extraction d'une chaine dans une chaine
    Par AliHome dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/07/2009, 13h39
  2. recherche d'une chaine dans une chaine
    Par jpclutier dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 03/12/2007, 11h30
  3. Tester une chaine dans une chaine
    Par ulysse031 dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 26/03/2007, 00h48
  4. chercher caractére d'une chaine dans une chaine
    Par ulysse031 dans le forum Langage
    Réponses: 25
    Dernier message: 21/03/2007, 18h09
  5. Réponses: 2
    Dernier message: 19/10/2005, 15h38

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