Cours programmation arguments d’un programme et variables d’environnement, tutoriel & guide de travaux pratiques en pdf.
Arguments d’un programme et variables d’environnement
Nous allons voir dans ce chapitre les passages d’arguments et variables d’environnement qui permettent à un shell de transmettre des informations à un programme qu’il lance. Plus généralement, ces techniques permettent à un programme de transmettre des informations aux programmes qu’il lance (processus fils ou descendants).
atoi, sprinf et sscanf
Parfois, un nombre nous est donné sous forme de chaîne de caractère dont les caractères sont des chiffres. Dans ce cas, la fonction atoi permet de réaliser la conversion d’une chaîne vers un int.
#include <stdio.h>
int main() { int a; char s[50];
printf(« Saisissez des chiffres : « );
scanf(« %s », s); \com{saisie d’une chaîne de caractères
}
a = atoi(s); \com{conversion en entier
}
printf(« Vous avez saisi : %d\n », a); return 0;
}
Plus généralement,la fonctions scanf permet de lire des données formatées dans une chaîne de caractère (de même que scanf permet de lire des données formatées au clavier ou fscanf dans un fichier texte).
#include <stdio.h>
int main()
{
float x; char s[50];
printf(« Saisissez des chiffres (avec un point au milieu) : « ); scanf(« %s », s); /* saisie d’une chaîne de caractères */ sscanf(s, « %f », &x); /* lecture dans la chaîne */ printf(« Vous avez saisi : %f\n », x); return 0;
}
Inversement, la fonction sprintf permet d’écrire des données formatées dans une chaîne decaractères(demêmeque printf permet d’écrire dans lac onsole ou fprintf dans un fichier texte). #include <stdio.h>
void AfficheMessage(char *message) { puts(message); }
int main() { float x; int a;
printf(« Saisissez un entier et un réel : « ); scanf(« %d %f », &a, &x); sprintf(s, « Vous avez tapé : a = %d x = %f », a, x); AfficheMessage(s); return 0;
}
Arguments du main
La fonction main d’un programme peut prendre des arguments en ligne de commande. Par exemple, si un fichier monprog.c a permis de générer un exécutable monprog à la compilation, gcc monprog.c -o monprog on peut invoquer le programme monprog avec des arguments ./monprog argument1 argment2 argument3 Exemple. La commande cp du bash prend deux arguments : $ cp nomfichier1 nomfichier2
Pour récupérer les arguments dans le programme C, on utilise les paramètres argc et argv du main. L’entier argc donne le nombre d’arguments rentrés dans la ligne de commande plus 1, et le paramètre argv est un tableau de chaînes de caractères qui contient comme éléments : • Le premier élément argv[0] est une chaîne qui contient le nom du fichier executable du programme; • Les éléments suivants argv[1], argv[2],etc…sont des chaînes de caractères qui contiennent les arguments passés en ligne de commande. Le prototype de la fonction main est donc :
int main(int argc, char**argv); Exemple.Voici un programme longeurs,qui prend en argument des mots,et affiche la longueur de ces mots.
#includ e <stdio.h> #include <string.h>
int main(int argc, char**argv) { int i; printf(« Vous avez entré %d mots\n », argc-1); puts(« Leurs longueurs sont : »); for (i=1 ; i<argc ; i++) { printf(« %s : %d\n », argv[i], strlen(argv[i])); } return 0; } Voici un exemple de trace : $ gcc longueur.c -o longueur $ ./longueur toto blabla Vous avez entré 2 mots Leurs longueurs sont : toto : 4 blabla : 6