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.