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 :

augmenter dynamiquement la taille d'une chaine de caractère


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Points : 57
    Points
    57
    Par défaut augmenter dynamiquement la taille d'une chaine de caractère
    Bonjour,

    Dans un programme, je crée une chaine de caractère au départ vide et selon le déroulement de ce programme, ma chaine doit être modifiée en y ajoutant un ou plusieurs caractères.
    Afin d'avoir un code le plus propre possible et surtout le plus dynamique possible, j'aurais aimé savoir si il y avait moyen d'échapper à une déclaration fixe de la taille de ma chaîne au début mais d'agrandir au fur et à mesure sa taille quand je veux ajouter des caractères.

    Merci par avance pour votre aide.

  2. #2
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 91
    Points : 115
    Points
    115
    Par défaut
    Bonjour

    Si ta chaine a été allouée par malloc (calloc ou realloc) alors il est possible de modifier sa taille pour l'augmenter en utilisant realloc.

    http://linux.die.net/man/3/realloc

  3. #3
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    Bonjour,

    il existe en c les fonctions d'allocations dynamique comme malloc et calloc
    et une fonction permettant de réallouer de la mémoire realloc. Et fonction de déallocation de mémoire free.

    Pour ce que tu veux faire, le principe est de déclarer un pointeur de type char, exemple car les fonctions d'allocations dynamique de mémoire nécessite un pointeur;

    Peux tu décrire plus en détaille ce que ton programme doit faire exactement?

    merci
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Points : 57
    Points
    57
    Par défaut
    Ce sont effectivement ces pistes que je cherchais.
    En fait, je dois parser un fichier. Lors du parcours de ce fichier, j'ai en particulier une chaine de caractère créée au début et qui change (s'agrandit) au fur et à mesure de mon parcours.
    Lorsque que je tombe sur un certain élément défini par mon parser, je veux ajouter ajouter cet élément (nouveaux caractères) à ma chaine.
    Désolée, je suis pas sûre que ce soit plus clair pour vous ...

  5. #5
    Membre éclairé

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Points : 690
    Points
    690
    Par défaut
    Tu as en gros déjà une chaine de caractére qui je suppose au début est vide et ensuite au fur et à mesure tu le rempli par les élément trouvé dans ton fichier.

    voici une maniére de faire parmis d'autre, il te faut quatre varaibles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char *chaine =NULL;
    int compteur=0 ;
    int i; //compteur de boucle
    char carac //contient l'élément trouvé dans ton fichier à ajouter dans ton tableu;
    Tu parcours ton fichier dans une boucle à toi de choisir celui qui te convient, ensuite la premiére fois que tu trouve le premier élément à ajouter dans ton tableau tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chaine = malloc(malloc(sizeof(char) * c); //allocation dynamique avec malloc 
    chaine[i]=c; //ajout l'élément trouvé dans le tableau chaine 
    compteur++;//compteur vaut maintenant 1, ce qui va te permettre au prochain tour de boucle d'utiliser la fonction realloc
    La deuxiéme fois que tu trouvera un autre élément tu fera une réallocaton de ta chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chaine = realloc(chaine, sizeof(char) * (c + 1))//réallocation de la mémoire 
    chaine[i] = c; //ajout du nouveau élément trouvé dans le tableau chaine 
    compteur++;
    Ceci est un exemple inspire toi en le complétant de ce qui est manquant
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    @Seelass
    La deuxiéme fois que tu trouvera un autre élément tu fera une réallocaton de ta chaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chaine = realloc(chaine, sizeof(char) * (c + 1))//réallocation de la mémoire 
    chaine[i] = c; //ajout du nouveau élément trouvé dans le tableau chaine 
    compteur++;
    Il faut tenir compte de l'échec possible de la réallocation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p = realloc(chaine, sizeof(char) * (c + 1))//réallocation de la mémoire 
    if(p != NULL) chaine = p;
    en cas de succès, chaine pointe sur la mémoire nouvellemnt allouée et en cas d'échec sur la mémoire anciennement allouée (ce qui peut permettre de la désallouer)
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Points : 57
    Points
    57
    Par défaut
    Super ! Oui c'est exactement ça que je cherchais !

    Merci beaucoup pour votre aide !

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

Discussions similaires

  1. la taille d'une chaine du caractére
    Par farid0031 dans le forum C++Builder
    Réponses: 2
    Dernier message: 30/04/2009, 09h24
  2. taille d'une chaine de caractère
    Par Magical dans le forum Langage
    Réponses: 10
    Dernier message: 26/07/2007, 16h36
  3. [mysql 4.11] Select sur la taille d'une chaine de caractère
    Par epeichette dans le forum Requêtes
    Réponses: 8
    Dernier message: 19/06/2007, 09h50
  4. Taille d'une chaine de caractères en PL/SQL
    Par soumou dans le forum PL/SQL
    Réponses: 3
    Dernier message: 02/11/2006, 21h29
  5. la taille d'une chaine de caractère
    Par rakhaoui dans le forum ASP
    Réponses: 2
    Dernier message: 05/06/2006, 14h01

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