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
while
para 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