PASSARE PARAMETRI /ARGOMENTI AL MAIN sulla linea di comando Al main si possono passare sulla linea di comando dei parametri (o argomenti) costituiti da stringhe di caratteri. I parametri vanno specificati dopo il nome dell' eseguibile, come ad esempio: % a.out par1 par2 par3 Due esempi (in grassetto quanto scritto dall'utente): 1)Questo programma saluta gli argomenti scritti sulla linea di comando: % a.out anna maria giovanna ciao anna, ciao maria, ciao giovanna. 2)Questo programma fa invece l'eco delle righe lette da tastiera, se contengono la stringa passata come parametro: % a.out oggi che giorno e' oggi? che giorno e' oggi? domani sara' lunedi' oggigiorno e' di moda andare al mare oggigiorno e' di moda andare al mare e' di moda uscire di sera nell'week end ^D Un main che usa parametri passati sulla linea di comando va definito così: int main(int argc, char *argv[]) E' il sistema operativo che passa in argc (argument count) il numero dei parametri +1, in argv (argument vector) l'indirizzo di una array di puntatori a stringhe; in argv[0] c'è il puntatore al nome dell’eseguibile, in argv[i] il puntatore allo i-esimo parametro. argc = 4 argv[0] argv[1] ‘a’ ’.’ ‘o’ ‘u’ ‘t’ ‘\0’ ‘\0’ ‘p’ ’a’ ‘r’ ‘1’ ‘\0’ argv[2] ‘p’ ’a’ ‘r’ ‘2’ ‘\0’ argv[3] ‘p’ ’a’ ‘r’ ‘3’ ‘\0’ 1 Es 1. /* saluta gli argomenti scritti sulla linea di comando */ int main (int argc,char *argv[]) { int i; for (i=1; i< argc;i++) printf(" ciao %s%c", argv[i],(i<argc-1) ? ',': '.'); printf("\n"); return 0; } Es 2. /* fa l'eco delle righe che legge da tastiera, contengono la stringa passata come parametro */ int main(int argc, char *argv[]){ se char linea[100]; while(gets(linea) != NULL) if (strstr(linea,argv[1])!= NULL) puts(linea); } Es 3. Modificare il secondo esempio in modo che usi il primo parametro come flag opzionale: a.out -x parola stampa le righe che non contengono parola a.out –n parola stampa le righe che contengono parola precedute dal numero di linea a.out -nx parola stampa le righe che non contengono parola, precedute dal numero di linea Oss. In ambiente DevC++ per passare al main i parametri si esegue il comando run sul file eseguibile seguito dal parametro. Nell’esempio 2, sulla mia macchina, io dovrei eseguire il comando run aprendo il file: D:\giulia_uff_30\Didattica\Programmi_C\prog1 oggi 2 Puntatori a puntatori I puntatori a puntatori sono costrutti usati in programmi sofisticati: per dichiarare un puntatore a puntatore occorre far precedere il nome della variabile da due asterischi consecutivi int **p; // dichiara p come puntatore ad un puntatore ad int Per accedere al valore dell’int, è necessario utilizzare i doppi asterischi: j = **p; assegna un intero a j 3