Início › Funções › Argumentos de Linha de Comando
O que são argc e argv?
Até agora, você estava escrevendo int main(void). Mas main também pode ser escrita para aceitar argumentos da linha de comando.
int main (int argc, char *argv[]) {
// argc: number of arguments (Argument Count)
// argv: array of argument strings (Argument Vector)
}
argc
O número de argumentos (incluindo o nome do próprio programa ).
argv[]
Cada argumento como string — um array de char*.
Por exemplo, se você roda ./myprogram hello world:
Variável Valor Significado
argc 3 3 argumentos no total
argv[0] "./myprogram" o nome do programa
argv[1] "hello" primeiro argumento
argv[2] "world" segundo argumento
Importante: argv[0] guarda o próprio nome do programa . Os argumentos fornecidos pelo usuário começam em argv[1] .
Uso básico
Aqui está um programa que imprime cada argumento recebido:
#include <stdio.h>
int main (int argc, char *argv[]) {
printf ("Number of arguments: %d\n" , argc);
for (int i = 0 ; i < argc; i++) {
printf ("argv[%d] = %s\n" , i, argv[i]);
}
return 0 ;
}
$ gcc args.c -o args
$ ./args hello world 123
Number of arguments: 4
argv[0] = ./args
argv[1] = hello
argv[2] = world
argv[3] = 123
Usando argumentos como números
Todo elemento de argv é uma string (um char*) . Para usar um como número, você tem que converter primeiro.
Função Tipo de destino Header Exemplo
atoi(s)int stdlib.h int n = atoi(argv[1]);
atof(s)double stdlib.h double d = atof(argv[1]);
atol(s)long stdlib.h long l = atol(argv[1]);
Exemplo: calculadora na linha de comando
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[]) {
if (argc != 3 ) {
printf ("Usage: %s num1 num2\n" , argv[0 ]);
return 1 ;
}
int a = atoi (argv[1 ]);
int b = atoi (argv[2 ]);
printf ("%d + %d = %d\n" , a, b, a + b);
return 0 ;
}
$ ./calc 15 27
15 + 27 = 42
Sempre valide seus argumentos. Cheque argc primeiro e, se a contagem estiver errada, imprima uma mensagem de uso e saia.
Exemplo prático: passando um nome de arquivo
Programas do mundo real frequentemente recebem o nome de um arquivo para processar como argumento da linha de comando.
#include <stdio.h>
int main (int argc, char *argv[]) {
if (argc != 2 ) {
printf ("Usage: %s filename\n" , argv[0 ]);
return 1 ;
}
FILE *fp = fopen (argv[1 ], "r" );
if (fp == NULL ) {
printf ("Cannot open file '%s'\n" , argv[1 ]);
return 1 ;
}
char line[256 ];
while (fgets (line, 256 , fp) != NULL ) {
printf ("%s" , line);
}
fclose (fp);
return 0 ;
}
$ ./cat scores.txt
Taro 80
Hanako 95
Jiro 70
Esta é uma versão simplificada do clássico comando cat do UNIX.
Quiz
// When you run the following command
// $ ./prog hello world
Qual é o valor de argc?
2
3
1
0
Explicação: argc conta os argumentos incluindo o nome do programa : ./prog, hello, world — isso dá 3 . Então argv[0]="./prog", argv[1]="hello", argv[2]="world".
// Running $ ./calc 10 20
int a = atoi (argv[1 ]);
int b = atoi (argv[2 ]);
printf ("%d\n" , a + b);
O que ele imprime?
30
1020
erro
0
Explicação: atoi("10") → 10 e atoi("20") → 20, então 10 + 20 = 30 . Sem atoi, você pode acabar com concatenação de strings ("1020") — cuidado com isso.