Programmare in C – Argomenti da linea di comando

Guida C

Il linguaggio C dispone di un meccanismo semplice per recuperare i parametri passati da linea di comando (inseriti dall’utente da linea di comando).

A disposizione della funzione main vi è un parametro chiamato argv. La struttura argv compare ed è gestita da un numero molto elevato di chiamate a librerie avanzate. Si consiglia di cercare di capire a fondo cosa contiene la struttura argv.

#include <stdio.h>

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

    printf("%d\n",argc);
    for (x=0; x

In questo codice, il programma principale (main) accetta in input due parametri, argv e argc. Il parametro argv è un array di puntatori a stringa che contiene i parametri utilizzati al momento dell'invocazione del programma da linea di comando. L'intero argc contiene il numero di parametri passati.

Il programma precedente non fa altro che stampare i comandi passati a linea di comando. Per verificare, provate a compilare il suddetto codice in un file eseguibile chiamato aaa e digitate quindi aaa xxx yyy zzz. Il codice stamperà i parametri da linea di comando xxx, yyy, zzz uno per ogni linea.

Invece, char *argv[] è un array di puntatori a stringa. In altre parole, ogni elemento dell'array è un puntatore e ogni puntatore punta a una stringa (tecnicamente, il primo carattere della stringa). Pertanto, argv[0] punta a una stringa che contiene il primo parametro della linea di comando (ossia il nome del programma), argv[1] punta al parametro successivo e così via. La variabile argc ci dice quandi puntatori dell'array sono validi.

Poiché argv esista, si può _ quando necessario – far rispondere il programma in base ai valori inseriti da linea di comando. Per esempio, supponiamo di voler fare in modo che il programma riconosca la parola help come primo parametro successivo al nome del programma e effettuiamo il dump di un file di help sullo standard output. I nomi dei file possono essere passati come parametri per essere anche utilizzati in istruzioni fopen.

STAMPA     Tags:,

Leave a Reply