Structure de donnée à attribut variable

nassim1987 Messages postés 105 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 27 janvier 2014 - 7 oct. 2010 à 17:05
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 8 oct. 2010 à 08:24
Bonjour,
je programme en c,et je voudrais avoir une structure de donnée avec pour chaque enregistrement un nombre nombre d'attribut variable et non fixé à la déclaration de la structure par exemple:
typedef struct{
type_attibut1 attribut1 ;
type_attibut2 attribut2;
type_attibut3 attribut3;
.
.
.
.
type_attributN attributN; } nom_structure ;


Voila je voudrais savoir comment faire pour déclarer cette structure avec N qui n'est pas une constante mais une variable puis comment lire et ecrire dans cette structure

Merci

6 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
7 oct. 2010 à 17:51
Salut,

C'est impossible, par contre tu peux peut être essayer de faire une liste chaînée.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 oct. 2010 à 19:45
En fait, on peut mais c'est hard à utiliser. Le DDK Windows en comporte de nombreux exemples.

Je t'en crée un:
typedef struct __BNVAR {
UINT64 v;
DWORD count;
DWORD tab[1];
} BNVAR, *LPBNVAR;

Si tu utilises:
BNVAR vr;
La structure est figée et sizeof(vr) = 16, hors de question d'allonger tab[].

Par contre:
LPBNVAR pvr;
err = MaFunc(LPBNVAR *pvr);
En ce cas MaFunc() fait l'alloc nécessaire pour n elems, faisons 4 on aura donc 16 + 12:
LPBNVAR p = (LPBNVAR) VirtualAlloc(0, 28, MEMDISPO, PAGE_READWRITE);
p->count = 4;
*pvr = p;
Ainsi appelant peut utiliser tab[0 - count-1].
Mettre un coup de VirtualFree() pour finir.

ciao...
BruNews, MVP VC++
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
7 oct. 2010 à 21:02
@BruNews : si je ne m'abuse, ceci ne semble affecter que la taille d'un des membres (le tableau), pas le nombre de membres présents dans la structure, c'est bien ça ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 oct. 2010 à 21:56
OUI bien entendu dans l'exemple que j'ai fait.

A bien relire sa question, c'est CHAQUE membre qu'il voudrait variable. En ce cas effectivement une 'structure' n'est pas du tout ce qu'il faudrait.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nassim1987 Messages postés 105 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 27 janvier 2014 1
7 oct. 2010 à 23:20
re salut,
je sais pas si vous avez compris mais je parle du nombre s'attribue à initialisation,en plus les attributs sont tous de même type(des doubles),je voudrais décider seulement au début à la déclaration, mais aprés tt mes enregistrement auront la méme taille

merci
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 oct. 2010 à 08:24
Si tous les membres sont du meme type et que leur nombre est inconnu, on fait un tableau et il n'y a plus aucun probleme.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous