C++ - int main (int argc, char * argv[])

si j'ai ceci:

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

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

quand utilisons-nous argv[1] au lieu de argv[0] ? Est-ce seulement lorsque nous voulons simplement lire l'argument second dans la ligne de commande?

4
demandé sur Charles 2011-03-07 11:24:58

7 réponses

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

cependant, ce n'est pas ont pour être vrai -- les programmes peuvent des fonctions spécifiques à OS pour contourner cette exigence, et cela arrive assez souvent que vous devriez être au courant de celui-ci. (Je ne suis pas sûr si il ya beaucoup que vous pouvez faire, même si vous en êtes conscients, 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"]

ainsi, argv[0] se réfère à gcc , et non à -O3 .

12
répondu Mehrdad 2011-03-07 08:28:06

argv est un tableau de pointeurs, et chaque pointeur dans ce tableau stocke un argument de la ligne de commande. Donc argv[0] est le premier argument (qui est l'exécutable/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 .

5
répondu Nawaz 2011-03-07 09:34:50

supposons que votre C++ fichier exécutable est:

/home/user/program (ou C:\program.exe sous Windows)

si vous exécutez:

./home/user/program 1 2 (ou C:\program.exe 1 2 sous 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 suivante: est-ce que l'args [0] est garanti être la voie de l'exécution?

3
répondu Oscar Mederos 2017-05-23 12:08:56

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

2
répondu Bogatyr 2011-03-07 08:26:51

réponse Courte est oui, le tableau contient toutes les options passées dans le programme.

0
répondu Nim 2011-03-07 08:26:38

comme argv[0] est filepath du programme lui-même. Les paramètres supplémentaires de la ligne de commande sont dans d'autres index, argv[1],argv[2].. Vous pouvez lire plus ici : http://www.site.uottawa.ca/~lucia/courses/2131-05/labs/Lab3/CommandLineArguments.html

0
répondu DhruvPathak 2011-03-07 08:28:27

Oui, c'est surtout, argv[1] est le deuxième paramètre de ligne de commande. Le premier paramètre de 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 des autres, il pourrait être logique d'appeler argv[0] le zeroth paramètre, 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 l'usage:

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

dans le shell (Unix) lorsque vous tapez une commande, si nécessaire le shell résout d'abord le nom de la commande (en utilisant $PATH ) pour trouver le chemin absolu réel. Le chemin (absolu ou relatif) est fourni pour path , et la commande telle que saisie à l'origine est fournie comme arg0 , devenant éventuellement argv[0] dans votre programme.

le reste paramètres de la ligne de commande se terminent alors par argv[1] , etc.

0
répondu Alnitak 2011-03-08 20:55:16