print · rss · source

< Les pointeurs | TutoCFrench | Les fonction d'entrée/sortie >


Passer des arguments à un programme

Notions :

  • int main(int argc, char* argv[])
  • atoi()

Lors du lancement d'un programme par le shell, celui-ci peut lui passer des paramètres.

Récupèrer les paramètres

En C, ces arguments sont récupèrés dans un tableau de tableaux de caractères : char *argv[].
L'entier argc indique le nombre d'arguments passés au programme dans le tableau argv.

Compilons par exemple le programme ci-dessous (notez que le premier argument est toujours le nom du programme lui-même, comme en shell) :

int main(int argc, char *argv[])
{
    printf("nom du programme: %s\n", argv[0]);
    printf("1er argument: %s\n", argv[1]);
    printf("2e argument: %s\n", argv[2]);

    return 0;
}

Ensuite exécutons ce programme :

user$ ./prog un deux
nom du programme: ./prog
1er argument: un
2e argument: deux

Le schéma ci-dessous essaye de donner une idée imagée de la façon dont sont stockées les différentes valeurs en mémoire :

La variable argv est un tableau qui contient 3 valeurs, tel qu'indiqué par argc. Ces valeurs correspondent aux adresses où sont stockés les différents paramètres.

Convertir les arguments récupérés

Convertir une chaîne en un entier

On utilise pour cela la fonction atoi() :

char ch[] = "1234";
int n;
n = atoi(ch); /* 'n' a maintenant pour valeur 1234 */

Exercices

1. "params.c" : programme qui affiche tous les arguments passés en paramètre en indiquant leur position :

$ prog un pomme 1234 toto
1 un
2 pomme
3 1234
4 toto

2. "add.c" : programme qui additionne tous les nombres passés en argument et qui affiche le résultat
3. "encadre.c" : programme qui encadre une phrase passée en argument de la façon suivante :

$ encadre "Bonjour a tous"
++++++++++++++++++
+ Bonjour a tous +
++++++++++++++++++

Solutions

params.c

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i;

    for (i=1; i<argc; i++) 
        printf("%d %s\n", i, argv[i]);
    return 0;
}

add.c

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

int main(int argc, char *argv[])
{
    int i, tot = 0;

    for (i=1; i<argc; i++) 
        tot += atoi(argv[i]);
    printf("%d\n", tot);

    return 0;
}

encadre.c

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int i;

    if (argc != 2) {
        printf("usage : %s <string>\n", argv[0]);
        return 1;
    }

    for (i=0; i<strlen(argv[1])+4; i++)
        printf("+");
    printf("\n");

    printf("+ %s +\n", argv[1]);

    for (i=0; i<strlen(argv[1])+4; i++)
        printf("+");
    printf("\n");

    return 0;
}

< Les pointeurs | TutoCFrench | Les fonction d'entrée/sortie >

print · rss · source
Page last modified on February 12, 2008, at 10:24 AM