Recupera gli argomenti della riga di comando in C++
-
Usa la notazione
int main(int argc, char *argv[])
per recuperare gli argomenti della riga di comando in C++ -
Usa la notazione
int main(int argc, char **argv)
per recuperare gli argomenti della riga di comando in C++ -
Usa il cicli
while
per stampare gli argomenti della riga di comando in C++
Questo articolo spiegherà diversi metodi su come recuperare gli argomenti della riga di comando in C++.
Usa la notazione int main(int argc, char *argv[])
per recuperare gli argomenti della riga di comando in C++
Gli argomenti della riga di comando sono valori stringa che possono essere passati al programma all’inizio dell’esecuzione. Di solito, questi argomenti sono ampiamente utilizzati dai programmi che hanno un’interfaccia solo CLI, ad es. Utilità della riga di comando Unix. Notare che il programma C++ dovrebbe avere una speciale definizione di funzione main
per accedere agli argomenti della riga di comando. Vale a dire, la funzione main
dovrebbe includere i parametri come - (int argc, char *argv[])
. Il parametro argc
rappresenta il conteggio totale degli argomenti passati al programma, incluso il nome del programma stesso. D’altra parte, argv
memorizza l’array delle stringhe di caratteri che denotano i valori degli argomenti, a cui è possibile accedere utilizzando la notazione dell’array - argv[0]
. Ricorda che l’array di puntatori char
è garantito per essere terminato con 0
.
L’esempio seguente mostra l’utilizzo di base del cicli for
per stampare ogni valore di argomento sulla console. Nota però, l’istruzione if
precedente si assicura che il programma abbia gli argomenti specificati e quindi continua l’esecuzione.
#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);
}
Usa la notazione int main(int argc, char **argv)
per recuperare gli argomenti della riga di comando in C++
C’è un altro prototipo di funzione main
che è valido e si comporta esattamente come il precedente, quindi lo includiamo per assicurarci che non ci sia confusione quando si verifica la seguente notazione - int main(int argc, char **argv)
. Si noti che l’accesso agli elementi avviene nello stesso modo e possono essere attraversati utilizzando il cicli 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);
}
Usa il cicli while
per stampare gli argomenti della riga di comando in C++
Un altro metodo per accedere ai valori degli argomenti consiste nel dereferenziare il puntatore argv
finché non è uguale a zero. Si noti che l’array argv
è garantito per essere terminato con valore zero, che possiamo utilizzare per implementare un cicli while
per attraversare l’array e stampare i valori degli argomenti uno per uno. Si noti che la chiamata printf
nell’istruzione if
di seguito agisce come un reporter di errori che indica che non sono stati passati abbastanza argomenti al programma. La parte interessante è che il nome del programma viene recuperato con la notazione argv[0]
e l’identificatore %s
, rendendolo un metodo più flessibile rispetto all’hard-coding del nome ogni volta che cambia.
#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