4 votes

int main(int argc, char *argv[])

Si j'ai ça :

int main(int argc, char *argv[])

Dans le corps, vous pouvez parfois trouver des programmes utilisant argv[1] .

Quand utilisons-nous argv[1] sur argv[0] ? Est-ce que c'est seulement lorsque nous voulons simplement lire le deuxième dans la ligne de commande ?

12voto

Mehrdad Points 70493

Par convention , argv[0] est le nom du programme actuel (ou chemin), et argv[1] par le biais de argv[argc - 1] sont les arguments de la ligne de commande que l'utilisateur fournit.

Cependant, cela ne ont pour être vrai - les programmes peuvent des fonctions spécifiques à l'OS pour contourner cette exigence, et cela se produit assez souvent que vous devriez en être conscient. (Je ne suis pas sûr qu'il y ait beaucoup de choses que vous puissiez faire même si vous en êtes conscient, cependant...)

Exemple :

gcc -O3 -o temp.o "My file.c"

produirait (devrait) les arguments suivants :

argc: 5
argv: ["gcc", "-O3", "-o", "temp.o", "My file.c"]

En disant argv[0] ferait référence à gcc , no a -O3 .

6voto

Nawaz Points 148870

argv est un tableau de pointeurs, et chaque pointeur dans ce tableau stocke un argument de la ligne de commande. Ainsi, argv[0] est le premier argument (c'est-à-dire l'exécutable/le programme lui-même), argv[1] est le deuxième argument, et ainsi de suite !

Le nombre total d'arguments est déterminé par argc .

2voto

Bogatyr Points 12027

Argv[0] est le chemin d'exécution du programme, argv[1] est le premier paramètre du programme

2voto

Oscar Mederos Points 9159

Supposons que votre C++ Le fichier exécutable est :

/home/user/program (o C:\program.exe dans Windows)

si vous exécutez :

./home/user/program 1 2 (o C:\program.exe 1 2 dans Windows)

argv[0] = /home/user/program ( C:\program.exe )
argv[1] = 1
argv[2] = 2

C'est parce que :

  • argv[0] est le chemin du fichier exécutable
  • argv[1] est le 1er argument

Edit :

Maintenant je vois que argv[0] n'est pas nécessairement le chemin du fichier exécutable.
Lisez la question SO suivante : Est-ce que args[0] est garanti comme étant le chemin d'exécution ?

0voto

Alnitak Points 143355

Oui, c'est surtout ça, argv[1] est le deuxième paramètre de la ligne de commande. Le premier paramètre de la ligne de commande est le nom du programme lui-même.

Alternativement, pour éviter le désordre sémantique que cette réponse avait à l'origine, et les commentaires d'autres personnes, il pourrait être judicieux d'appeler argv[0] la fonction zeroth de sorte que argv[1] serait maintenant la "première" des valeurs fournies par l'utilisateur.

En tout cas, cela vient de la exec() famille de fonctions, par exemple execl qui a un usage :

 int execl(const char *path, const char *arg0, ... /*, (char *)0 */);

Dans l'interpréteur de commandes (Unix), lorsque vous tapez une commande, si nécessaire, l'interpréteur de commandes commence par résoudre le nom de la commande (à l'aide de la commande $PATH ) pour trouver le véritable chemin absolu. Le chemin (absolu ou relatif) est fourni pour path et la commande telle qu'elle a été tapée à l'origine est fournie en tant que arg0 pour finalement devenir argv[0] dans votre programme.

El restant Les paramètres de la ligne de commande se terminent alors comme suit argv[1] etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X