argc e argv
Leia argumentos do programa.
argc e argv é uma aula grátis de C Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C Academy inclui 4 aulas no total.
Os programas recebem argumentos
Quando você executa um programa em um terminal, pode passar palavras extras chamadas argumentos de linha de comando.
C os entrega à função main por meio de dois parâmetros: argc (quantidade de argumentos) e argv (vetor de argumentos).
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("This program received %d arguments\n", argc);
return 0;
}A assinatura de main
A forma completa de main é:
int main(int argc, char *argv[])
argc é a quantidade de argumentos. argv é um vetor de ponteiros para strings, um para cada argumento.
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("argc = %d\n", argc);
return 0;
}argv[0] é o nome do programa
O elemento first, argv[0], é o nome (ou caminho) usado para invocar o programa.
É por isso que argc é pelo menos 1 mesmo quando o usuário não passa argumentos adicionais.
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Program name: %s\n", argv[0]);
return 0;
}Imprimindo todos os argumentos
Você pode percorrer os índices de 0 a argc - 1 para visitar cada cadeia de argumento em argv.
#include <stdio.h>
int main(int argc, char *argv[]) {
for (int i = 0; i < argc; i++) {
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0;
}argv termina com NULL
Pelo padrão C, argv[argc] é garantidamente um ponteiro NULL.
Isso significa que você pode percorrer argv até encontrar NULL, em vez de usar argc, embora seja mais comum contar com argc.
#include <stdio.h>
int main(int argc, char *argv[]) {
char **p = argv;
while (*p != NULL) {
printf("%s\n", *p);
p++;
}
return 0;
}Os argumentos são sempre cadeias de caracteres
Cada argumento chega como uma cadeia de caracteres, até mesmo os números. Se um usuário passa 42, você recebe o texto "42", não o inteiro.
Você precisa convertê-lo por conta própria com funções como atoi ou strtol.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (argc > 1) {
int n = atoi(argv[1]);
printf("Number plus one is %d\n", n + 1);
} else {
printf("Pass a number\n");
}
return 0;
}Verificando a quantidade de argumentos
Verifique sempre argc antes de ler argv[i]. Acessar um índice além dos argumentos fornecidos resulta em comportamento indefinido.
Uma proteção típica verifica se foram fornecidos argumentos suficientes e, caso contrário, imprime uma mensagem de uso.
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s <name>\n", argv[0]);
return 1;
}
printf("Hello, %s!\n", argv[1]);
return 0;
}Usando um código de saída diferente de zero
Quando os argumentos estão incorretos, retorne um valor diferente de zero de main para sinalizar a falha ao shell.
Por convenção, 0 significa sucesso e qualquer outro valor significa que ocorreu um erro.
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Need exactly 2 arguments\n");
return 1;
}
printf("Got both arguments\n");
return 0;
}Somando argumentos numéricos
Um exemplo prático: some todos os números passados na linha de comando, convertendo cada um com atoi e acumulando um total.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int sum = 0;
for (int i = 1; i < argc; i++) {
sum += atoi(argv[i]);
}
printf("Sum = %d\n", sum);
return 0;
}Notação alternativa para argv
Você pode encontrar char **argv em vez de char *argv[]. Como parâmetro de função, ambas as formas significam a mesma coisa: um ponteiro para o primeiro ponteiro de cadeia de caracteres.
As duas permitem usar índices com argv[i].
#include <stdio.h>
int main(int argc, char **argv) {
if (argc > 1)
printf("First arg: %s\n", argv[1]);
return 0;
}Reexibindo os argumentos
O comando clássico echo simplesmente imprime seus argumentos. Veja uma versão mínima que os une com espaços.
#include <stdio.h>
int main(int argc, char *argv[]) {
for (int i = 1; i < argc; i++) {
printf("%s", argv[i]);
if (i < argc - 1) printf(" ");
}
printf("\n");
return 0;
}Verificação rápida
Teste sua compreensão de argc e argv.
Recapitulação
Você aprendeu como os programas leem a entrada da linha de comando:
main(int argc, char *argv[])recebe a quantidade e a matriz.- argv[0] é o nome do programa; os argumentos reais começam no índice 1.
argv[argc]é NULL.- Os argumentos são sempre cadeias de caracteres; converta números com
atoie valideargcprimeiro.
Perguntas Frequentes
A aula “argc e argv” é grátis?
Sim — o texto completo de “argc e argv” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C Academy, atualize para CoddyKit PRO. O curso de C Academy inclui 4 aulas no total.
O que vou aprender em “argc e argv”?
Leia argumentos do programa. Você pratica C Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C Academy?
Nenhuma experiência prévia é necessária. C Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “argc e argv”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C Academy?
Sim. Cada aula de C Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.