Mai mult
Ce se int argc, char *argv[] înseamnă?
În multe C++ IDE's și compilatoare, atunci când generează funcția principală pentru tine, se pare ca acest lucru:
int main(int argc, char *argv[])
Când am cod C++ fără un IDE, doar cu un command line compiler, tip I:
int main()
fără parametri. Ce înseamnă acest lucru, și este vital pentru programul meu?
475
8
argv
șiargc
cum sunt argumente în linia de comandă sunt transmise `main () în C și C++.argc
va fi numărul de siruri de caractere indicat deargv
. Acest lucru va (în practică) 1 plus numărul de argumente, ca aproape toate implementarile va adauga numele de programul de la matrice.Variabilele sunt nume
argc
(argument conta) șiargv
(argument vector) prin convenție, dar ele pot fi date în orice identificator valid:int main(int num_args, char** arg_strings)
este la fel de valabil.Ele pot fi, de asemenea, omise în totalitate, obținându-se
int main()
, dacă nu intenționați să proceseze argumente în linia de comandă.Încercați următorul program:
argc
este numărul de argumente fiind trecut în program din linia de comandă șiargv
este o serie de argumente.Puteți bucla prin argumente știind numărul lor, cum ar fi:
Să presupunem că executați programul astfel (folosind " sh " sintaxa):
Dacă ți-ai declarat principalul ca
int main(int argc, char *argv[])
, apoi (în cele mai multe medii), ta `main () va fi numit ca:Cu toate acestea, dacă ați declarat dvs. principal ca
int main()
, acesta va fi numit ceva de genulși tu nu't obține argumente trecut.
Alte două lucruri de reținut:
*argv [] " și "**argv
sunt exact echivalente, astfel încât să puteți scrieint main(int argc, char *argv []) " ca " int main(int argc, char **argv)
.Parametrii de "principal" reprezintă parametrii de linie de comandă prevăzute la program când a fost început. Anii
argc
parametru reprezintă numărul de argumente în linia de comandă, șichar *argv[]
este o matrice de siruri de caractere (caractere pointeri) reprezentând individuale argumentele oferite pe linia de comandă.Aceasta este o simplă declarație. Ea nu poate lua orice argumente în linia de comandă.
Această declarație este utilizată atunci când programul trebuie să aibă argumente în linia de comandă. Când fugi ca atare:
argc
, sau Argument Conta, va fi setat la 4 (patru argumente), șiargv
, sau Argument Vectori, vor fi populate cu șir de indicii pentru a "myprogram", "arg1", "arg2", și "arg3". Programul de invocare (myprogram
) este inclus în argumente!Alternativ, ai putea folosi:
Acest lucru este, de asemenea, valabil.
Acolo este un alt parametru puteți adăuga:
Anii
envp
parametru conține, de asemenea, variabile de mediu. Fiecare intrare cum urmează acest format:astfel:
Variabilele de mediu lista este null-terminate.
IMPORTANT: NU utilizați orice
argv
sauenvp valorile direct în apeluri de sistem()
! Aceasta este o mare gaura de securitate ca malware utilizatorii pot seta variabilele de mediu la linia de comandă comenzi și (potențial) provoca daune masive. În general, doar don't folosi sistemul()`. Există aproape întotdeauna o soluție mai bună aplicare prin biblioteci C."Principală" funcție poate avea doi parametri,
argc " si " argv
.argc
este un număr întreg (int
) parametru, și acesta este numărul de argumente trecut la program.Numele programului este întotdeauna primul argument, deci nu va fi cel puțin un argument pentru un program și valoarea minimă a
argc
va fi unul. Dar dacă un program are în sine două argumente valoarea deargc
va fi de trei.Parametru
argv
puncte la un șir de matrice și este numit argument vector. Acesta este un one-dimensional matrice de șiruri de argumentele funcției.Primul parametru este numărul de argumente furnizate și cel de-al doilea parametru este o listă de șiruri de caractere care reprezintă aceste argumente.
Atât de
sunt definiții legale de punctul de intrare pentru un C sau C++ program. Stroustrup: C++ Stil și Tehnică FAQ detalii despre unele dintre modificările care sunt posibile sau juridice pentru funcția de principal.