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?

Comentarii la întrebare (6)
Soluția

argv și argc cum sunt argumente în linia de comandă sunt transmise `main () în C și C++.

argc va fi numărul de siruri de caractere indicat de argv. 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) și argv (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:


#include 

int main(int argc, char** argv) {
    std::cout 
Comentarii (11)

argc este numărul de argumente fiind trecut în program din linia de comandă și argv este o serie de argumente.

Puteți bucla prin argumente știind numărul lor, cum ar fi:

for(int i = 0; i < argc; i++)
{
    // argv[i] is the argument at index i
}
Comentarii (0)

Să presupunem că executați programul astfel (folosind " sh " sintaxa):

myprog arg1 arg2 'arg 3'

Dacă ți-ai declarat principalul ca int main(int argc, char *argv[]), apoi (în cele mai multe medii), ta `main () va fi numit ca:

p = { "myprog", "arg1", "arg2", "arg 3", NULL };
exit(main(4, p));

Cu toate acestea, dacă ați declarat dvs. principal ca int main(), acesta va fi numit ceva de genul

exit(main());

și tu nu't obține argumente trecut.

Alte două lucruri de reținut:

  1. Acestea sunt doar două standard impusă de semnături pentru "principal". Dacă o platformă special acceptă argumente suplimentare sau un alt tip de retur, atunci's o extensie și nu ar trebui să fie invocate într-un program de portabil.
  2. *argv [] " și "**argv sunt exact echivalente, astfel încât să puteți scrie int main(int argc, char *argv []) " ca " int main(int argc, char **argv).
Comentarii (3)

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ă, și char *argv[] este o matrice de siruri de caractere (caractere pointeri) reprezentând individuale argumentele oferite pe linia de comandă.

Comentarii (2)
int main();

Aceasta este o simplă declarație. Ea nu poate lua orice argumente în linia de comandă.

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

Această declarație este utilizată atunci când programul trebuie să aibă argumente în linia de comandă. Când fugi ca atare:

myprogram arg1 arg2 arg3

argc, sau Argument Conta, va fi setat la 4 (patru argumente), și argv, 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:

int main(int argc, char** argv);

Acest lucru este, de asemenea, valabil.

Acolo este un alt parametru puteți adăuga:

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

Anii envp parametru conține, de asemenea, variabile de mediu. Fiecare intrare cum urmează acest format:

VARIABLENAME=VariableValue

astfel:

SHELL=/bin/bash    

Variabilele de mediu lista este null-terminate.

IMPORTANT: NU utilizați orice argv sau envp 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.

Comentarii (0)

"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 de argc 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.

Comentarii (1)

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.

Comentarii (2)

Atât de

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

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.

Comentarii (4)