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 :

erreur de débutant


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 20
    Par défaut erreur de débutant
    Salut,
    J'ai une erreure de débutant, mais j'y comprend rien pour l'instant.

    En résumé j'ai developpé un programme assez gros. pour l'utiliser je veux rajouter un système d'option par ligne de commande en Dos plus un fichier de configuration d'ou je prend mes argument par défaut.

    Dès le debut du programme, juste apres le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _tmain(int argc,char* argv[])
    je me suis rendu compte que le contrenue des argv se limite au premier caractère. par exemple :
    mon_prog.exe -v

    dans argv[0] j'ai : 'm'
    dans argv[1] j'ai : '-'

    ce qui fait que ca crache par la suite.
    est ce que qlq pourrait me donner une explication merci !

    ps: désolé pour mon francais

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour
    Par défaut, Visual a du te créer ton projet en Unicode.
    Change ton main comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int _tmain(int argc, _TCHAR* argv[])
    Et ne pré-supposes pas que les chaînes de caractères sont en char*.
    Enfin, si tu le peux, privilégie les std::string/std::wstring dans le reste de ton programme.

    Une autre solution consiste à changer les options de ton programme (volet de gauche : Configuration Properties/General - Volet de droite : Character Set 'Use Unicode Character Set' -> 'Not Set'

    P.S. : ne t'inquiètes pas pour ton français, je le trouve de bonne qualité et il doit certainement contenir moins de faute que celles de mes interventions

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 20
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Bonjour
    Par défaut, Visual a du te créer ton projet en Unicode.
    Change ton main comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int _tmain(int argc, _TCHAR* argv[])
    Et ne pré-supposes pas que les chaînes de caractères sont en char*.
    Enfin, si tu le peux, privilégie les std::string/std::wstring dans le reste de ton programme.

    Une autre solution consiste à changer les options de ton programme (volet de gauche : Configuration Properties/General - Volet de droite : Character Set 'Use Unicode Character Set' -> 'Not Set'

    P.S. : ne t'inquiètes pas pour ton français, je le trouve de bonne qualité et il doit certainement contenir moins de faute que celles de mes interventions
    J'ai choisit d'utiliser la deuxième manière (je me suis dis que c'est mieux si je veut porter plus facilement vers Linux) et ca marche ! Si je me trompe pas, c'est plus dans le standard AINSI...

    merci tout le monde

  4. #4
    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,

    Les arguments passés par la ligne de commande le sont sous la forme de chaines de caractères "C style" (tableaux de caractères terminés par un '\0').

    Si tu veux utiliser directement argv, tu dois donc utiliser les fonctions de manipulation de chaines propres au C telles que strcmp et autres joyeusetés du genre.

    Une solution qui en vaut une autre est de directement transformer le tableaux de chaines C style en tableaux ("C++ style") de chaines "C++style", sous une forme qui pourrait s'approcher de
    i
    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
    nt main(int argc char *argv[])
    {
        /* un vecteur de string, plus facile à manipuler ;) */
        std::vector<std::string> tab;
        for(int i=0i<argc;++1)
            tab.push_back(std::string(argv[i]);
        /* vérification des arguments passés */
        for(size_t i = 0; i<tab.size();++i)
        {
            if(tab[i]=="param_possible1")
            {
                /* que faire dans ce cas */
            }
            else if(tab[i]=="param_possible2")
            {
                 /*...*/
            }
            /* else if(...)... */
        }
    }
    Tu pourrais aussi t'intéresser à boost::program_options qui facilite énormément la gestion des paramètres transmis par la ligne de commande
    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

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

Discussions similaires

  1. L'erreur du débutant ?
    Par Enkahel dans le forum Débuter
    Réponses: 1
    Dernier message: 04/05/2007, 10h33
  2. Erreur de débutant
    Par michel71 dans le forum Débuter
    Réponses: 2
    Dernier message: 10/12/2006, 14h21
  3. [SQL] Erreur grand débutant echo / $data
    Par carelha dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/05/2006, 12h01
  4. Message d'erreur pour débutant
    Par PhpDeb dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 27/04/2006, 12h14
  5. erreur de débutant
    Par michel71 dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 08/03/2006, 00h26

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