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 :

signification de argv, argc et envp


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    BNS
    BNS est déconnecté
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 129
    Par défaut signification de argv, argc et envp
    Bonjour à tous,

    je cherche á comprende la signification de ces 3 arguments: argv, argc et envp. Ils sont en effet souvent appelé par la fonction main():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char **argv, char** envp);
    Quelle est la sigification de ces arguments? Ont-ils un rôle spécial à jouer dans le code? Quelle est l'influence de leur présence/absence? Sont-ils définis à des endroits stratégiques de la mémoire - comment les utiliser (correctement) ?

    Merci d'avance pour votre aide...

  2. #2
    Membre chevronné Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Par défaut
    http://repository.voidnull.org/codin...sreseau-3.html
    (merci google)

    au passage c'est la premiere fois que je fois ce envp mais ca s'explique par la remarque sur la page web

  3. #3
    BNS
    BNS est déconnecté
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 129
    Par défaut
    merci pour ta (edit: vos) réponse(s)...
    Mais comment définir et utiliser ces 3 paramètres? Car main() est lancé par défaut, sans même que l'utilisateur le requiert...

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par BNS
    merci pour ta réponse...
    Mais comment définir ces 3 paramètres? Car main() est lancé par défaut, sans même que l'utilisateur le requiert...

    Supposons que ton programme s'appelle main.exe pour définir les paramètres tu peux lancer en ligne de commande depuis une fenetre dos cette commande : main.exe param1 param2 param3

    Tu peux parcourir ensuite ton tableau argv jusqu'a rencontrer NULL pour afficher les arguments.


    Pour envp tu n'as rien à faire le tableau est rempli pour toi argc aussi

  5. #5
    BNS
    BNS est déconnecté
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 129
    Par défaut
    ok, merci beaucoup!

  6. #6
    Membre chevronné Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Par défaut
    apres compilation et link tu obtient un exe (toto par exemple)
    lors de l'appel en ligne de commande a
    argc vaudra 3
    argv[0] vaut "toto"
    argv[1] vaut "4"
    argv[2] vaut "sdfg"

    si tu utilise un environnement comme Code::block ou VC++ ou autre, il est possible de remplir ces parametres dans les options du projet (en fouillant dans les menus tu devrai trouver)

    [edit] arg trop tard [/edit]

  7. #7
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par straasha
    apres compilation et link tu obtient un exe (toto par exemple)
    lors de l'appel en ligne de commande a
    argc vaudra 3
    argv[0] vaut "toto"
    argv[1] vaut "4"
    argv[2] vaut "sdfg"

    si tu utilise un environnement comme Code::block ou VC++ ou autre, il est possible de remplir ces parametres dans les options du projet (en fouillant dans les menus tu devrai trouver)

    [edit] arg trop tard [/edit]
    Et tu as argv[3] qui vaut NULL. En fait argv[argc]=NULL

  8. #8
    Membre chevronné Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Par défaut
    Citation Envoyé par hegros
    Et tu as argv[3] qui vaut NULL. En fait argv[argc]=NULL
    tient je savais pas... moi j'aurai dit indefini

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par straasha
    [edit] arg trop tard [/edit]
    interjection de circonstance

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 50
    Par défaut
    a noter que tu peux appeller ces parametres comme tu veux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int   main(int nb, char **arguments, char **environnement)
    {
    }
    par exemple, et que le troisieme est facultatif

  11. #11
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par BNS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char **argv, char** envp);
    Quelle est la sigification de ces arguments? Ont-ils un rôle spécial à jouer dans le code? Quelle est l'influence de leur présence/absence? Sont-ils définis à des endroits stratégiques de la mémoire - comment les utiliser (correctement) ?

    Merci d'avance pour votre aide...

    Déja je te rappelle que main est une fonction qui est appelée lors du lancement du programme c'est à dire que tu as un fichier .obj qui contient un appel à main.

    On a donc
    -argc : nombre d'argument que reçoit la fonction main
    -argv : la liste des arguments
    -envp : liste des variables d'environnement (pas portable)

    Pour leur présence/absente ca dépend si tu utilises ou pas ces paramètres auquel cas tu peux mettre int main(void)

    Pour l'emplacement mémoire c'est en ram rien de particulier à priori.

    Pour l'utilisation tu dois savoir que le tableau de pointeur sur chaine argv se termine par NULL ce qui indique la fin de la liste des arguments.

    Il n'y a rien dans la FAQ ?

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

Discussions similaires

  1. int main(int argc, char** argv)
    Par MABB dans le forum C++
    Réponses: 1
    Dernier message: 19/11/2007, 12h20
  2. $argc et $argv et PHP ?
    Par blanchonvincent dans le forum Langage
    Réponses: 2
    Dernier message: 17/11/2007, 00h00
  3. Paramètres entrée (argc, argv) par défaut ?
    Par jomeo dans le forum Visual C++
    Réponses: 3
    Dernier message: 01/03/2007, 12h02
  4. Donner des valeurs à Argc et Argv dans le code
    Par olivier857 dans le forum C
    Réponses: 44
    Dernier message: 20/06/2006, 13h57

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