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 :

Déclaration dynamique d'un tableau de chaine de caractères


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 5
    Par défaut Déclaration dynamique d'un tableau de chaine de caractères
    Bonjour,
    Je suis débutant et mon code suivant ne passe pas à la compilation (Mon objectif est d'allouer dynamique un tableau de chaine de caractères)

    Monfichier.h :

    typedef struct MaStruct
    {
    ...
    ...
    char *MonTableau[30]; // Je veux que la taille de mes chaines de caractère soit de 30

    }MaStruct;

    Monfichier.cpp
    ...
    TailleDynamic = 50; // Par exemple
    MaStruct->MonTableau= new char[TailleDynamic][30] ;
    ...

    Le message d'erreur à la compilation

    cannot convert from 'char (*)[30]' to 'char *[30]'

    Merci d'avance pour votre aide

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Pourquoi tu n'utilises pas soit un std::string soit un std::vector< char > ?

    MAT.

  3. #3
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *MonTableau[30]; // Je veux que la taille de mes chaines de caractère soit de 30
    Non, tu crois faire un tableau dynamique de tableaux statiques de 30 chars, mais tu fais l'inverse : ici MonTableau est un tableau statique de 30 pointeurs char*.

    Soit tu définis le type « tableau de 30 char » pour simplifier les manipulations :
    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
    #include <iostream>
     
    typedef char Chaine[30];
     
    struct MaStruct
    {
        Chaine* MonTableau;
    };
     
    int main()
    {
        const size_t TailleDynamic = 50;
        MaStruct s;
        s.MonTableau = new Chaine [TailleDynamic] ;
        return 0;
    }
    Soit tu passes tout en mémoire dynamique, ce qui présente l'avantage d'avoir des chaînes de tailles variables (bien que dans cet exemple j'utilise 30 partout) :
    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
    20
     
    #include <iostream>
     
    struct MaStruct
    {
        enum {STR_LEN = 30};
        char** MonTableau;
    };
     
    int main()
    {
        const size_t TailleDynamic = 50;
        MaStruct s;
        s.MonTableau = new char* [TailleDynamic];
        for (size_t i = 0; i < TailleDynamic; ++i)
        {
            s.MonTableau[i] = new char [MaStruct::STR_LEN];
        }
        return 0;
    }
    Mais ce genre de solutions est habituellement déployée en langage C, je rejoins l'avis de Mat007 et te suggère d'utiliser std::string, ça simplifie grandement les choses.

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Un pointeur vers un tableau de 30 caractères ça se déclare ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char (*MonTableau)[30];
    Je conseillerais néanmoins d'utiliser std::vector<boost::array<char, 30> >

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 5
    Par défaut
    Merci enormement a vous tous
    Sinon je ne voulais pas utliser des bib std car le code sur lequel je travaille est en c (Je compile avec c++) mais aussi car je voulais guarder une certaine coherance avec les autres parties du code
    Merci encore une fois à vous tous
    Ps: j'ai pris la solution de Haze

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    ben si c'est du C, pourquoi tu postes sur le forum C++?

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/03/2010, 21h12
  2. Déclaration statique d'un tableau de chaines
    Par ymoreau dans le forum Débuter
    Réponses: 2
    Dernier message: 07/08/2009, 13h29
  3. Déclaration dynamique d'un tableau dans une procédure
    Par lowwa132 dans le forum Débuter
    Réponses: 12
    Dernier message: 25/01/2009, 21h51
  4. Réponses: 10
    Dernier message: 31/05/2007, 15h10
  5. [C] tableau de chaines de caractères
    Par kitsune dans le forum C
    Réponses: 18
    Dernier message: 01/04/2006, 18h18

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