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 :

int main (int argc, char ** argv)


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Points : 9
    Points
    9
    Par défaut int main (int argc, char ** argv)
    Bonjour,

    Est-ce que quelqu'un pourrait m'explique à quoi servent les deux variables int argc et char ** argv affichées en paramètres de la fonction main ? J'avoue que ça me déstabilise beaucoup.

    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    c'est pour récupérer des arguments utilisés pour lancer l'exécutable.
    http://c.developpez.com/faq/?page=Co...e-de-commandes
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    J'ajoute à la réponse de Bousk un petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main(int ac, char **av) {
        int i(0);
     
        while (av[i]) {
            std::cout << "-> " << av[i++] << std::endl;
        }
        return 0;
    }
    Maintenant lance ce programme comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./le_programme argument1 "coucou !" "comment ca va ?"
    Je pense que tu comprendras parfaitement comment cela fonctionne.

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    la subtilité se cachant derrière ce code étant que le dernier élément est garanti d'être 0.

    Supposons tu appelles argc et argv (pour "argument count" et "argument values") les arguments de main (int main(int argc, char** argv)).
    Alors les trois propriétés suivantes sont vraies:
    • argc > 0
    • argv[0]!=0
    • argv[argc]==0
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Tout à fait, la condition "idéale" aurait d'ailleurs été :


  6. #6
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    En C++, il peut être intéressant de construire un vecteur de strings à partir de ces arguments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <string>
    #include <vector>
    #include <iostream>
    int main(int argc, char* argv[])
    {
        std::vector<std::string> args(argv, argv + argc); // ligne intéressante
     
        for (const auto& arg : args) {
            std::cout << arg << std::endl;
        }
     
        return 0;
    }
    -- Yankel Scialom

Discussions similaires

  1. Transformer (int année, int mois, int jour) en millisecondes
    Par Logic_613 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 24/04/2012, 11h08
  2. Exécution main(int argc,char **argv)
    Par jadoud dans le forum Visual Studio
    Réponses: 1
    Dernier message: 28/01/2012, 14h34
  3. int main (int argc,char** argv)
    Par shadowless dans le forum Débuter
    Réponses: 5
    Dernier message: 31/05/2011, 16h45
  4. Explication pour ca SVP -> int main(int argc, char *argv[])
    Par Hackaholic dans le forum Débuter
    Réponses: 7
    Dernier message: 01/09/2009, 09h05
  5. int main(int argc, char** argv)
    Par MABB dans le forum C++
    Réponses: 1
    Dernier message: 19/11/2007, 12h20

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