Récupérer des arguments de ligne de commande en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la notation int main(int argc, char *argv[]) pour récupérer les arguments de ligne de commande en C++
  2. Utilisez la notation int main(int argc, char **argv) pour récupérer les arguments de ligne de commande en C++
  3. Utilisez la boucle while pour imprimer les arguments de ligne de commande en C++
Récupérer des arguments de ligne de commande en C++

Cet article explique plusieurs méthodes de récupération des arguments de ligne de commande en C++.

Utilisez la notation int main(int argc, char *argv[]) pour récupérer les arguments de ligne de commande en C++

Les arguments de ligne de commande sont des valeurs de chaîne qui peuvent être transmises au programme au début de son exécution. Habituellement, ces arguments sont largement utilisés par les programmes qui ont une interface CLI uniquement, par ex. Utilitaires de ligne de commande Unix. Notez que le programme C++ doit avoir une définition de fonction main spéciale pour accéder aux arguments de ligne de commande. A savoir, la fonction main doit inclure les paramètres comme - (int argc, char *argv[]). Le paramètre argc représente le nombre total d’arguments passés au programme, y compris le nom du programme lui-même. D’autre part, argv stocke le tableau des chaînes de caractères qui désignent les valeurs d’argument, accessibles en utilisant la notation de tableau - argv[0]. Attention, le tableau de pointeurs char est garanti se terminer par 0.

L’exemple suivant montre l’utilisation de base de la boucle for pour afficher chaque valeur d’argument sur la console. Notez cependant que l’instruction if précédente s’assure que le programme a des arguments spécifiés et continue ensuite l’exécution.

#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);
}

Utilisez la notation int main(int argc, char **argv) pour récupérer les arguments de ligne de commande en C++

Il y a un autre prototype de fonction main qui est valide et se comporte exactement comme le précédent, donc nous l’incluons pour nous assurer qu’il n’y a pas de confusion lorsque la notation suivante se produit - int main(int argc, char **argv). Notez que l’accès aux éléments se fait de la même manière, et qu’ils peuvent être parcourus à l’aide de la boucle 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);
}

Utilisez la boucle while pour imprimer les arguments de ligne de commande en C++

Une autre méthode pour accéder aux valeurs des arguments consiste à déréférencer le pointeur argv jusqu’à ce qu’il soit égal à zéro. Notez que le tableau argv est garanti pour se terminer avec une valeur nulle, que nous pouvons utiliser pour implémenter une boucle while pour parcourir le tableau et afficher les valeurs d’argument une par une. Notez que l’appel printf dans l’instruction if ci-dessous agit comme un rapporteur d’erreur indiquant que suffisamment d’arguments n’ont pas été passés au programme. La partie intéressante est que le nom du programme est récupéré avec la notation argv[0] et le spécificateur %s, ce qui en fait une méthode plus flexible que le codage en dur du nom à chaque fois qu’il change.

#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);
}
Auteur: 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