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 :

Initialisation de pointeur sur chaîne de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Par défaut Initialisation de pointeur sur chaîne de caractères
    Salut à toutes et à tous,

    Voici un petit problème que je cherche à résoudre. J'ai un fichier texte qui contient un nombre de lignes que j'ignore. En revanche, je sais que chaque ligne contient 27 caractères. Afin d'enregistrer ces lignes dans une variable de façon aussi optimales que possible (en terme de mémoire), je commence par déclarer un tableau de caractère "pseudo-dynamique" comme suit:

    char *data[28];

    Maintenant, j'aimerais allouer de la mémoire en fonction du nombre de ligne de mon fichier. Comment dois-je faire. J'ai déjà essayé:

    if ((data = malloc(nbAtoms*sizeof(char))) == NULL) {bla bla;}

    Je comprends parfaitement pourquoi cette commande plante à la compilation. Mais je ne parviens pas à trouver le moyen d'allouer de la mémoire de cette façon-ci.

    Une idée ?

    Merci,
    Mickaël

  2. #2
    Expert confirmé
    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
    Par défaut
    je commence par déclarer un tableau de caractère "pseudo-dynamique" comme suit:
    char *data[28];
    ce n'est pas un tableau de caractères, mais un tableau de pointeurs sur caractères.

    Chaque ligne contenant 27 caractères, un ligne peut être stockée dans un tableau de 27+1 char : char [28].
    Si on a N lignes, on peut les stocker dans un tableau de N tableaux de 28 char.
    N n'étant pas connu à la compilation, on peut allouer dynamiquement ce tableau par malloc()

    Si on connait avant de les lire le nombre total N de lignes, un malloc suffit pour créer ce tableau. L'adresse du premier élément de ce tableau sera mise dans un pointeur. Comme les éléments sont des tableaux de 28 char, ce pointeur doit être du type "adresse d'un tableau de 28 char" soit char (*)[28] :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    char (*data)[28] = malloc(N*sizeof *data);
    if (data != NULL) 
    {
      ....
      strcpy(data[i],ligne);
      bla bla;
     }
    else {bla bla}
    Si on ne connait pas avant de les lire le nombre total N de lignes, c'est plus compliqué puisqu'il faudra procéder à des réallocations. Les réallocations peuvent amener à un déplacement des données donc en pratique de tout ce qui a déjà été lu précédemment si on utilise une adaptation de la méthode précédente. Si le fichier peut être très gros, cela peut amener à des déplacements très pénalisants de quantités importantes de données et il faudra envisager de modifier cette stratégie.

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Par défaut
    Salut Diogene,

    C'est exactement ce que je cherchais!
    En fait, je n'avais pas pensé à considéré le pointeur comme une entité à part entière.

    D'autre part; en effet, il s'agit bien d'un tableau de pointeurs sur caractères!

    Encore merci,
    Mickaël

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

Discussions similaires

  1. [Requêtes] opérations sur chaînes de caractères
    Par guyom_ dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 18/12/2006, 11h47
  2. Pointeur et chaîne de caractères
    Par gijode dans le forum C
    Réponses: 4
    Dernier message: 22/11/2006, 09h26
  3. [Tableaux] Opération sur chaîne de caractères
    Par kespy13 dans le forum Langage
    Réponses: 3
    Dernier message: 19/04/2006, 14h32
  4. Réponses: 4
    Dernier message: 08/02/2005, 20h47

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