Argumentos de linha de comando

A linguagem C oferece um mecanismo bastante simples para recuperar parâmetros de linha de comando digitados pelo usuário. Ele passa um parâmetro argv para a função principal no programa. As estruturas argv aparecem em número expressivo das mais avançadas chamadas de biblioteca, portanto compreendê-las é útil a qualquer programador de C.

Digite o seguinte código e compile-o:  

#include <stdio.h>

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

    printf("%d\n",argc);
    for (x=0; x<argc; x++)
       printf("%s\n",argv[x]);
    return 0;
}

Neste código, o programa principal aceita dois parâmetros, argv e argc. O parâmetro argv é uma matriz de ponteiros para string que contém os parâmetros digitados quando o programa foi chamado na linha de comando do UNIX. O inteiro argc contém a soma do número de parâmetros. Esta parte do código representa os parâmetros da linha de comando. Para testar, compile o código em um arquivo executável denominado aaa e digite aaa xxx yyy zzz. O código imprimirá os parâmetros de linha de comando xxx, yyy e zzz, um em cada linha.  

A linha char *argv[] é uma matriz de ponteiros para string. Em outras palavras, cada elemento da matriz é um ponteiro e cada ponteiro aponta para uma string (tecnicamente, ao primeiro caractere da string). Assim, argv[0] aponta para uma string de caracteres que contém o primeiro parâmetro na linha de comando (o nome do programa), argv[1] aponta para o próximo parâmetro e assim sucessivamente. A variável argc indica quantos ponteiros na matriz são válidos. Você verá que o código precedente não faz nada além de imprimir cada string válida apontada por argv.   

Por haver o argv, você pode permitir que o programa reaja aos parâmetros de linha de comando digitados pelo usuário de forma fácil. Por exemplo, você pode querer que seus programas detectem a palavra help como o primeiro parâmetro depois do nome do programa e esvaziem um arquivo de ajuda em stdout.  Os nomes de arquivos também podem ser passados e usados em suas instruções fopen.