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?
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
.
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
.
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?
argv[0] est le chemin d'exécution du programme, argv[1] est le premier paramètre du programme
réponse Courte est oui, le tableau contient toutes les options passées dans le programme.
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
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.