Recupera gli argomenti della riga di comando in C++

Jinku Hu 12 ottobre 2023
  1. Usa la notazione int main(int argc, char *argv[]) per recuperare gli argomenti della riga di comando in C++
  2. Usa la notazione int main(int argc, char **argv) per recuperare gli argomenti della riga di comando in C++
  3. Usa il cicli while per stampare gli argomenti della riga di comando in C++
Recupera 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);
}
Autore: 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