Sommaire: Cours Programmation en langage C
1/ Allocation dynamique de la mémoire
2/ Entrées/sorties
2.1/ Entrée/sortie formatée avec fscanf et fprintf
2.2/ Entrée/sortie binaire avec fread et fwrite
2.3/ Ouverture, fermeture et déplacement dans un fichier
3/ Exercice de synthèse
4 / Annexes
4.1/ Description détaillée de malloc, calloc, free
4.1/ La fonction fscanf
4.2/ La fonction fprintf
4.3/ Les fonctions fread et fwrite
Extrait du cours programmation en langage C
1/ Allocation de la mémoire
En langage C, le programmeur a sa charge la gestion de la mémoire dans le programme qu’il développe. Si le programmeur souhaite manier un ensemble de nombre flottants de taille n, variable, la seule possibilité que lui offre le langage C est l’allocation dynamique de la mémoire via la création d’un pointeur sur float, objet de type float *. C’est ce que fait la procédure suivante :
int n;
float *px;
n = 100;
px = (float *) malloc(n * sizeof(float));
Pour allouer dynamiquement de la mémoire on utilise les fonctions calloc ou malloc. Lorsque la mémoire allouée n’est plus utile il faut la libérer en utilisant la fonction free. Ces fonctions sont disponibles dans la bibliothèque standard stdlib. On trouve la description des fonctions d’allocation et de libération de la mémoire dans les pages de manuel de Linux. Voici un extrait (ne pas faire attention à la fonction realloc qui n’est pas au programme) :
2/ Entrées / sorties
Le langage C est très utilisé pour communiquer avec les fichiers. La bibliothèque standard propose une large variété de fonctions d’entrées / sorties vers un fichier . En ce qui concerne le traitement d’entrées / sorties, on distingue souvent les fichiers texte des fichier binaires. Un fichier texte est une suite d’ octets codant chacun un caractère de l’alphabet étendu. Un fichier binaire est tout sauf un fichier texte.
2. 1/ Entrées / sorties f ormatées avec fscanf et fprintf
Pour lire et écrire des données dans un fichier texte, on utilise les f onction fscanf et fprintf :
int fscanf (FILE *stream, const char *format, …);
int fprintf (FILE *stream, const char *format, …);
La f onction fscanf analyse les entrées conformément à la chaîne format. Elle lit ses entrées depuis le f lux pointé par stream. Les arguments pointeurs successifs (les « … » dans la déclaration cidessus) doivent correspondre correctement aux indicateurs de conversion fournis dans la chaîne La f onction printf produit des sorties en accord avec le format décrit par la chaîne format.
Elle écrit sa sortie vers le f lux de sortie pointé par stream. Les arguments qui suivent la chaîne format sont les éléments dirigés vers le flux de sortie et doivent correspondre à la chaîne format. Les fonctionnalités offertes grâce à l’utilisation de la chaîne format sont nombreuses et sont décrites en détails dans les pages de manuel de Linux. Quelques exemples valent mieux qu’un long discours pour montrer le principes et les fonctionnalités de base.
2.2/ Entrées / sorties binaires avec fread et fwrite
Pour lire et écrire des données binaires, on utilise les f onctions fr ead et fwrite. Finalement ces fonctions sont beaucoup plus simples que fscanf et fprintf car il n’ y a pas de formatage. Voici comment ces fonctions sont déclarées dans le fichier d’entête de la bibliothèque standard stdio.size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream);size_t fwrite (const void *ptr, size_t size, size_t nmemb,FILE *stream);La f onction fr ead lit depuis le f lux pointé par stream nmemb éléments de données, chacun d’eux représentant size octets. Elle stocke dans le flux pointé par stream les valeurs lues dans ptr. La fonction fwrite écrit nmemb éléments de données chacun d’eux de taille size octets. fread et fwrite renvoient le nombre d’éléments correctement lus ou écrits. Si tout se passe bien, la valeur renvoyée est donc nmemb.
……..
Cours Programmation en langage C (741 KO) (Cours PDF)