Taille de ma structure

Signaler
Messages postés
260
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
27 août 2008
-
Messages postés
260
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
27 août 2008
-
Salut a tous,

J'ai un tres gros probleme qui me bloque toute mon avancé dans mon prog :

j'ai une structure :
typedef struct
{
unsigned short Locate;
char Taille;
} MaStructure;

ca me permet d'aller lire dans un fichier et de remplir cette structure, mais VC++ me dit qu'elle fait 4 octet alors qu'elle n'en fait que 3 (2 pour ushort et 1 pour le char).

du coup, quand je lit mon fichier, ca saut 1 octet a chaque fois. Comment faire pour que ma structue ne fasse bien que 3 octets ?

Merci beacoup, Hart

2 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
VC++ a raison, comme toujours ou presque.
Toi, tu y a mis une taille de 3 octets et c'est MAUVAIS, alors lui la passe a 4 pour aligner les donnees.
Tu peux changer comportement du compilo mais c'est tres mauvais pour les performances.
Il faut TOUJOURS aligner tes donnees au moins sur un multiple de 4 qui est sizeof(DWORD), c'est a dire la taille d'un registre, EAX etc, du processeur 32 bits.
Pour conclure tu refais:
typedef struct {
unsigned short Locate;
char Taille[2];
} MaStructure;

MaStructure a;
tu te serviras de
a.Taille[0]
en place de a.Taille
BruNews, ciao...
Messages postés
260
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
27 août 2008
1
Merci pour ta réponce mais j'ai enfin trouver le remede a mon probleme.
Déja, je ne peut pas faire autrement pour lire le fichier car c'est un fichier mapping qui provient de commandes numériques et je ne peut pas changer la maniere dont il est fait. Alors avec un #pragma pack(1) juste avant le déclaration de la strucure ca fonctionne bien. Donc c'est cool, j'ai pas a tout refaire !

Merci a toi, bonne prog
Hart