argc e argv em C
-
Use a notação
int argc, char *argv[]
para obter argumentos de linha de comando em C -
Use
memccpy
para concatenar argumentos de linha de comando em C
Este artigo irá explicar vários métodos de uso de argumentos de linha de comando, argc
e argv
, em C.
Use a notação int argc, char *argv[]
para obter argumentos de linha de comando em C
Quando um programa é executado, o usuário pode especificar as strings separadas por espaço chamadas de argumentos de linha de comando. Esses argumentos são disponibilizados na função main
do programa e podem ser analisados como strings individuais terminadas em nulo. Para acessar os argumentos, devemos incluir parâmetros como int argc, char *argv[]
, representando o número de argumentos passados e a matriz de strings contendo argumentos de linha de comando. A primeira string no array é o próprio nome do programa de acordo com a convenção; portanto, o número de argumentos argc
inclui o nome do programa. Podemos imprimir cada argumento de linha de comando com iteração simples por meio do array argv
, conforme demonstrado no exemplo a seguir.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);
exit(EXIT_SUCCESS);
}
Comando de amostra:
./program hello there
Resultado:
argv[0] = ./program
argv[1] = hello
argv[2] = there
A matriz argv
de strings terminadas em nulo é terminada com um ponteiro NULL
para denotar o último argumento. Assim, podemos utilizar este recurso para implementar o loop de impressão de argumento avaliando o próprio ponteiro argv
e incrementando-o até ser igual a NULL
. Note que é melhor fazer um ponteiro char*
separado para o loop para preservar o endereço original do array no caso de ser necessário posteriormente no programa. O código de exemplo a seguir assume que o mesmo comando é executado como no exemplo anterior.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
char **ptr;
for (ptr = argv; *ptr != NULL; ptr++) printf("%s\n", *ptr);
exit(EXIT_SUCCESS);
}
Resultado:
./program
hello
there
Use memccpy
para concatenar argumentos de linha de comando em C
A função memccpy
é parte dos utilitários de string de biblioteca padrão usados para concatenar as strings de array argv
. Observe que memccpy
é semelhante a memcpy
, exceto que leva o quarto argumento para especificar o caractere quando parar de copiar. Exploramos o último recurso para copiar apenas o conteúdo da string e parar no encerramento do byte nulo. No exemplo a seguir, verificamos se o usuário forneceu exatamente dois argumentos (exceto o nome do programa) e só então continuamos a execução do programa. Consequentemente, encadeamos duas chamadas memccpy
para copiar ambos os argumentos e imprimir a string concatenada no stdout
.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Usage: ./program string1 string2\n");
exit(EXIT_FAILURE);
}
size_t size = strlen(argv[1]) + strlen(argv[2]);
char buf[size];
memccpy(memccpy(buf, argv[1], '\0', size) - 1, argv[2], '\0', size);
printf("%s\n", buf);
exit(EXIT_SUCCESS);
}
Resultado:
hellothere
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook