Skip to content
Snippets Groups Projects
title: La ligne de commande
date: 16 octobre 2019

Point d'entrée d'un programme

  • Le point d'entrée est la fonction main(){.C}.

  • Elle peut être déclarée de 4 façon différentes:

    1. void main(){.C}.
    2. int main(){.C}.
    3. void main(int argc, char **argv){.C}.
    4. int main(int argc, char **argv){.C}.
  • argc{.C} est le nombre d'arguments passés à la ligne de commande: le premier est celui du programme lui-même.

  • argv{.C} est un tableau de chaînes de caractères passés sur la ligne de commande.

Exemple d'utilisation

Pour la fonction dans le programme prog

int main(int argc, char **argv)

Pour l'exécution suivante on a

$ ./prog -b 50 file.txt
argc == 4
argv[0] == "prog"
argv[1] == "-b"
argv[2] == "50"
argv[3] == "file.txt"

Conversion des arguments

  • Les arguments sont toujours stockés comme des chaînes de caractère.

  • Peu pratique si on veut manipuler des valeurs numériques.

  • Fonctions pour faire des conversions:

    int atoi(const char *nptr);
    long atol(const char *nptr);
    long long atoll(const char *nptr);
    double atof(const char *nptr);
    int snprintf(char *str, size_t size, 
                 const char *format, ...); 
    // str: buffer, size: taille en octets max à copier,
    // format: cf printf(), ret: nombre de char lus

Exemple d'utilisation

\footnotesize

#include <stdio.h>
#include <stdlib.h>
#include <libgen.h>

int main(int argc, char **argv) {
    if (argc != 3) {
        char *progname = basename(argv[0]);
        fprintf(stderr, "usage: %s name age\n", progname);
        return EXIT_FAILURE;
    }

    char *name = argv[1];
    int age = atoi(argv[2]);

    printf("Hello %s, you are %d years old.\n", name, age);
    return EXIT_SUCCESS;
}
$ ./prog Paul 29
Hello Paul, you are 29 years old.