Folosirea argumentelor din linia de comanda

Un program poate accesa argumente plasate la linia de comanda. Acestea sunt introduse in linia de comanda dupa numele programului. Spre exemplu, daca este lansat un program cu numele test avand argumentele 1 < 2 de la prompterul D:>, atunci linia de comanda se prezinta dupa cum urmeaza

C:\>test 1 < 2

Cele trei argumente 1, < si 2 pot fi aflate de catre program la momentul executiei. Ele pot fi concepute ca fiind argumentele transmise functiei main(). Astfel de linii de comanda permit transmiterea unei informatii particulare programului chiar in momentul lansarii in executie. Argumentele liniei de comanda pot cuprinde orice caracter (mai putin caracterele de comanda precum ENTER) si trebuie sa fie separate prin spatii albe. De retinut ca aceste argumente pot fi accesate numai din functia main(). Pentru ca argumentele liniei de comanda sa poata fi accesate trebuie declarata functia main() dupa cum urmeaza:

main(int argc, char *argv[])
{
/* Statements go here */
}

Primul parametru, argc, este un intreg care contime numarul de argumente disponibile din linia de comanda. Aceasta valoare poate fi cel putin 1, deoarece numele programului este numarat ca primul argument. Masivul argv[] este un masiv de pointeri catre siruri. Ca la orice masiv primul indice este 0, ultimul fiind argc-1. Pointerul argv[0] pointeaza numele programului name (inclusiv calea), argv[1] pointeaza primul argument de dupa numele programului, argv[2]  pe al doilea si asa mai departe. de retinut ca numele argc si argv[] nu sunt obigatorii putand fi folosite orice nume valide in C.

Linia de comanda este divizata in argumente discrete de catre orice caracter de tip spatiu. Daca argumentele trebuie sa contina spatii, trebuie inclus argumentul intreg intre ghilimele. Spre exemplu, daca la linia de comanda s-a introdus

D:>test unu "< doi"

unu este primul argument, si < doi este cel de-al doilea (pointat de argv[2]). Listing urmator ilustreaza modul de accesare al argumentelor din linia de comanda.

#include <stdio.h>
main(int argc, char *argv[]){
  int nr;
  printf("Numele programului este: %s\n", argv[0]);
  if (argc > 1){
    for (nr = 1; nr < argc; nr++)
    printf("Argumentul  %d: %s\n", nr, argv[nr]);
  }
  else
  puts("Nu s-au introdus argumente la linia de comanda.");
  return(0);
}

care la comanda

D:\>testarg

intoarce

Numele programului este: D:\TESTARG.EXE
Nu s-au introdus argumente la linia de comanda.

iar la comanda

D:\>testarg unu doi "3 4"

intoarce

Numele programului este: D:\TESTARG.EXE
Argumentul 1: unu
Argumentul 2: doi
Argumentul 3: 3 4

Cornel Mironel Niculae, 2003-2004

02-Dec-2003