Recuperar argumentos de linha de comando em C++
- 
          
            Use a notação int main(int argc, char *argv[])para recuperar argumentos de linha de comando em C++
- 
          
            Use a notação int main(int argc, char **argv)para recuperar argumentos de linha de comando em C++
- 
          
            Use o loop whilepara imprimir argumentos de linha de comando em C++
 
Este artigo explicará vários métodos de como recuperar argumentos de linha de comando em C++.
Use a notação int main(int argc, char *argv[]) para recuperar argumentos de linha de comando em C++
    
Os argumentos da linha de comando são valores de string que podem ser passados para o programa no início da execução. Normalmente, esses argumentos são amplamente utilizados pelos programas que possuem interface somente CLI, por exemplo, Utilitários de linha de comando do Unix. Observe que o programa C++ deve ter uma definição de função main especial para acessar os argumentos da linha de comando. Ou seja, a função main deve incluir os parâmetros como - (int argc, char *argv[]). O parâmetro argc representa a contagem total dos argumentos que foram passados para o programa, incluindo o próprio nome do programa. Por outro lado, argv armazena a matriz das cadeias de caracteres que denotam os valores do argumento, que podem ser acessados usando a notação de array - argv[0]. Lembre-se de que o array de ponteiros char tem a garantia de terminar com 0.
O exemplo a seguir demonstra o uso básico do loop for para imprimir cada valor de argumento no console. Porém, observe que a instrução if anterior garante que o programa tenha argumentos especificados e, em seguida, continue a execução.
#include <iostream>
#include <string>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
int main(int argc, char *argv[]) {
  if (argc < 2) {
    cerr << "No program parameters provided !" << endl;
    exit(EXIT_FAILURE);
  }
  for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);
  exit(EXIT_SUCCESS);
}
Use a notação int main(int argc, char **argv) para recuperar argumentos de linha de comando em C++
Há outro protótipo de função main que é válido e se comporta exatamente como o anterior, então o incluímos para garantir que não haja confusão quando ocorrer a seguinte notação - int main(int argc, char **argv). Observe que o acesso aos elementos é feito da mesma maneira e eles podem ser percorridos usando o loop for.
#include <iostream>
#include <string>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
int main(int argc, char **argv) {
  if (argc < 2) {
    cerr << "No program parameters provided !" << endl;
    exit(EXIT_FAILURE);
  }
  for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);
  exit(EXIT_SUCCESS);
}
Use o loop while para imprimir argumentos de linha de comando em C++
Outro método para acessar os valores do argumento é remover a referência do ponteiro argv até que seja igual a zero. Observe que, o array argv tem garantia de terminar com valor zero, que podemos utilizar para implementar um loop while para percorrer o array e imprimir os valores dos argumentos um por um. Observe que a chamada printf na instrução if abaixo atua como um relator de erro de que argumentos suficientes não foram passados para o programa. A parte interessante é que o nome do programa é recuperado com a notação argv[0] e o especificador %s, tornando-o um método mais flexível do que codificar permanentemente o nome cada vez que ele muda.
#include <iostream>
#include <string>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
int main(int argc, char *argv[]) {
  if (argc < 4) {
    printf("Usage: ./%s arg1 arg2 arg3\n", argv[0]);
    exit(EXIT_FAILURE);
  }
  while (*argv) {
    cout << *argv << endl;
    argv += 1;
  }
  exit(EXIT_SUCCESS);
}
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