Bonjour,
Dans l'exemple ci-dessous, je cherche à remplir un tableau à partir des données binaires lues dans un fichier (binaire).
Ce programme doit être statique. Je définis donc une taille maximum pour le tableau que je souhaite remplir : elle est égale au nombre maximum d'éléments que pourrait contenir le tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 #define C_NB_MAX_ELEM 10 #define NOMFICHIERSOURCE "Exemple.bin" #include <stdlib.h> #include <string.h> //Pour l'exemple typedef int32_t Element_t; //Exemple de programme remplissant des tableaux in32_t main( void ) { Element_t TableauExemple[C_NB_MAX_ELEM]: size_t NbElemLus = 0; NbElementLus = importBinaireElement( NOMFICHIER, TableauExemple ); return EXIT_SUCCESS } size_t importBinaireElement( char_t * p_NomFichier, Element_t * p_TableauARemplir ) { FILE * p_fichierBinaire = NULL; //Tant que le fichier n'est pas ouvert, on met une adresse invalide size_t NombreElemLus = 0; //Verifier que l'epace memoire est disponible if( p_TableauARemplir != NULL ) { /* Cette fonction remplit la table p_TableauARemplir de 0. Cette table comporte C_NB_MAX_ELEM elements de taille "sizeof(Element_t)" octets. */ //Ouverture du fichier binaire /* Le fichier est ouvert en lecture ('r') et en mode binaire ('b'). */ p_fichierBinaire = fopen(p_NomFichier, "rb"); //Si l'ouverture du fichier a reussi, la variable p_fichierBinaire contient une valeur valide if (p_fichierBinaire != NULL) { /* Cette fonction lit au plus C_NB_MAX_ELEM elements, chacun de taille "sizeof(Element_t)" octets, depuis le fichier accede au travers de p_fichierBinaire. Les elements sont ranges dans p_TableauARemplir. La fonction retourne le nombre d'elements vraiments lus. */ NombreElemLus = fread(p_TableauARemplir, sizeof(Element_t), C_NB_MAX_ELEM, p_fichierBinaire); // La lecture etant terminee, on ferme le fichier et affectons a nouveau une valeur invalide a p_fichierBinaire fclose(p_fichierBinaire); p_fichierBinaire = NULL; } } //Retourner le nombre d'elements importes return NombreElemLus; }
La ligne suivante a pour but de controler que le tableau où seront rangées au plus C_NB_MAX_ELEM données est suffisamment alloué en mémoire.
Malheureusement, je ne sais pas comment vérifier la quantité de mémoire allouée à partir d'une adresse. Ici, je voudrais vérifier que p_TableauARemplir est l'adresse du premier byte d'une zone mémoire à laquelle qu'au moins C_NB_MAX_ELEM*sizeof(Element_t) bytes auront été alloués. Est-ce possible. Pourriez-vous m'aider ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part if( p_TableauARemplir != NULL )
Dans cet exemple, ce n'est peut-être pas necessaire, mais la fonction importBinaireElement pourrait être utilisée dans des circonstances moins favorables.
Merci d'avance.
Partager