www.samueldiasneto.com: Linguagem C - args da linha de comando

<<< Voltar Avançar >>>

16. Argumentos da linha de comando

Seu programa C pode manipular os argumentos passados na linha de comando. Para isso existem dois parâmetros da função main() . Um é o parâmetro argc . Ele recebe o número de argumentos passados na linha de comando, incluindo o nome do programa. O segundo é argv . Este é uma matriz de ponteiros para strings que armazena ponteiros que apontam para cada um dos argumentos passados. Para um melhor entendimento observe o código abaixo:

/* entendendo os argumentos da linha de comando */

#include <stdio.h>

/* "argc" armazena o número de argumentos passados
 * na linha de comando, incluindo o nome do programa.
 * "argv" é uma matriz de ponteiros para strings e
 * armazena ponteiros que apontam para cada um
 * dos argumentos passados para a linha de comando.
 */
int main(int argc, char *argv[])
  {
    int contador;

    printf("Foram passados %d argumentos na linha de comando.\n",argc);

    for(contador = 0;contador < argc;contador++)
      printf("%do argumento => %s\n",contador,argv[contador]);

    return(0);
  }

Compilei o código acima com o nome de args . Observe abaixo como ficou uma sessão de execução deste programa:

[samu@pitanga c]$ ./args argumento1 argumento2
Foram passados 3 argumentos na linha de comando.
0o argumento => ./args
1o argumento => argumento1
2o argumento => argumento2
[samu@pitanga c]$

Caso o argumento a ser passado seja uma frase você deve colocá-lo entre aspas. Observe:

[samu@pitanga c]$ ./args "este é o primeiro argumento" argumento2 argumento3
Foram passados 4 argumentos na linha de comando.
0o argumento => ./args
1o argumento => este é o primeiro argumento
2o argumento => argumento2
3o argumento => argumento3
[samu@pitanga c]$

Você pode ainda manipular argv como ponteiro em vez de tratá-lo como uma matriz de strings. Para isso você deve declará-lo como um ponteiro para um ponteiro de strings. Exemplo:

/* tratando "argv" como ponteiro */

#include <stdio.h>

/* observe a declaração de "argv" como
 * um ponteiro para um ponteiro
 */
int main(int argc, char **argv[])
  {
    int contador = 0;

    printf("Foram passados %d argumentos na linha de comando.\n",argc);

    while(*argv)
      {
        printf("%do argumento => %s\n",contador,*argv);
        contador++;
        argv++;
      }

    return(0);
  }

Não que esqueça que argv é uma matriz de strings, então os dados passados na linha de comando são todos considerados caracteres ASCII. Isto significa que os valores numéricos deverão ser convertidos. Para maiores detalhes sobre a conversão de strings para valores numéricos dê uma olhada na seção Convertendo strings em números.

<<< Voltar Avançar >>>