CURSO DE C
A função main() pode ter parâmetros formais. Mas o programador não pode escolher quais serão eles. A declaração mais completa que se pode ter para a função main() é:
int main (int argc,char *argv[]);
Os parâmetros argc e argv dão ao programador acesso à linha de comando com a qual o programa foi chamado.
O argc (argument count) é um inteiro e possui o número de argumentos com os quais a função main() foi chamada na linha de comando. Ele é, no mínimo 1, pois o nome do programa é contado como sendo o primeiro argumento.
O argv (argument values) é um ponteiro para uma matriz de strings. Cada string desta matriz é um dos parâmetros da linha de comando. O argv[0] sempre aponta para o nome do programa (que, como já foi dito, é considerado o primeiro argumento). É para saber quantos elementos temos em argv que temos argc.
Exemplo: Escreva um programa que faça uso dos parâamentros argv e argc. O programa deverá receber da linha de comando o dia, mês e ano correntes, e imprimir a data em formato apropriado. Veja o exemplo, supondo que o executável se chame data:
data 19 04 99
O programa deverá imprimir:
19 de abril de 1999
#include <stdio.h>
#include <stdlib.h>
void main(int argc, char *argv[])
{
int mes;
char *nomemes [] = {"Janeiro", "Fevereiro", "Março",
"Abril", "Maio",
"Junho", "Julho", "Agosto", "Setembro",
"Outubro",
"Novembro", "Dezembro"};
if(argc == 4) /* Testa se o numero de parametros fornecidos esta' correto
o primeiro parametro e' o nome do programa, o segundo o dia
o terceiro o mes e o quarto os dois ultimos algarismos do ano */
{
mes = atoi(argv[2]); /* argv contem strings. A string
referente ao mes deve ser
transformada em um numero inteiro. A funcao atoi esta
sendo usada para isto: recebe a string e transforma no
inteiro equivalente */
if (mes<1 || mes>12) /* Testa se o mes e' valido */
printf("Erro!\nUso: data dia mes ano,
todos inteiros");
else
printf("\n%s de %s de 19%s", argv[1],
nomemes[mes-1], argv[3]);
}
else printf("Erro!\nUso: data dia mes ano, todos inteiros");
}
Curso de C do CPDEE/UFMG - 1996 - 1999