Bonjour,

Dans l'exemple ci-dessous, je cherche à remplir un tableau à partir des données binaires lues dans un fichier (binaire).

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;
}
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.

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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
if( p_TableauARemplir != NULL )
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 ?

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.