argc e argv em C

Jinku Hu 12 outubro 2023
  1. Use a notação int argc, char *argv[] para obter argumentos de linha de comando em C
  2. Use memccpy para concatenar argumentos de linha de comando em C
argc e argv 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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artigo relacionado - C Process