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 :

tableaux dynamique ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Sceener
    Inscrit en
    Mai 2007
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 231
    Par défaut tableaux dynamique ?
    Bonsoir tout le monde,

    alors j'essaye de créer un tableau dynamique et j'ai une erreur de compilation que je n'arrive pas à comprendre .

    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main(int nombre , char*argv[]) {
    char * argument[nombre];
    }
    j'ai l'erreur suivante : 
    Error: An integer constant expression is required within the array subscript operator.
    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    L'erreur est pourtant claire, pour qui comprend un peu l'anglais...

    Tu ne peux pas définir de manière statique (par opposition à de manière dynamique: à l'aide de new) une taille avec une valeur qui est susceptible de changer...

    Or, justement, la valeur de nombre va être fournie par le système d'exploitation en fonction... du nombre d'argument passé lors de l'appel de l'exécutable (en fait, c'est même la valeur de 1+argument, vu que ce qui correspond à argc[0] est en fait le nom de la commande)

    C'est à dire que, si tu appelle
    nombre vaudra 1 et si tu appelle
    nombre vaudra... 5.

    Par contre, une allocation dynamique du tableau *devrait* fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main(int argc, char *argv[]) //autant garder ce qui se fait normalement ;)
    {
        char *argument=new char[argc];
        /*...*/
        /*ne pas oublier de libérer la mémoire avant de sortir */
        delete[] argument;
        return 0;
    }
    NOTA:
    1. Le code fournis de quoi mettre (argc) caractères, ce qui est différents de (argc) chaines
    2. Bien plus sécurisant que d'utiliser l'allocation dynamique, il est intéressant d'envisager l'utilisation de la classe std::vector, qui gère cela de manière automatique
    3. Si le but est de concaténer les différents arguments en une seule chaîne unique, il peut sembler intéressant de se tourner vers la classe std::string, qui est elle aussi bien plus sécurisée

    ne fonctionnera qu'avec de simples caractères fournis en paramètres
    (ex: monapp.exe a b c d e)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <vector>
    int main(int argc, char *argv[])
    {
        std::vector<char> argument;
        if(argc>1)
        {
            for(size_t i=1;i<=argc;i++)
                argument.push_back(argv[i]);
        }
    }
    voir encore mieux vu que les arguments passé sont plutôt des chaînes de caractères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <vector>
    #include <string>
    int main(int argc, char *argv[])
    {
        std::vector<std::string> argument;
        std::vector<char> argument;
        if(argc>1)
        {
            for(size_t i=1;i<=argc;i++)
                argument.push_back(argv[i]);
        }
    }
    Enfin, il faut savoir que certaines bibliothèques fournissent des aides intéressantes pour la gestion des paramètres (boost::program_options, entre autre)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Tableaux dynamiques
    Par sebduth dans le forum Fortran
    Réponses: 5
    Dernier message: 05/07/2005, 15h36
  2. tableaux dynamiques
    Par Mynautor dans le forum C++
    Réponses: 23
    Dernier message: 12/02/2005, 02h45
  3. [D7] Tableaux dynamiques dans un record
    Par bobby-b dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2004, 23h23
  4. Article sur les tableaux dynamiques
    Par Eric Sigoillot dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2004, 22h00
  5. [Kylix] Tableaux dynamiques sour Kylix2
    Par Krän dans le forum EDI
    Réponses: 6
    Dernier message: 07/10/2003, 14h31

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