Taille de ma structure

crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 - 14 mars 2003 à 10:07
crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 - 14 mars 2003 à 14:47
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 mars 2003 à 13:56
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...
0
crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 1
14 mars 2003 à 14:47
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
0
Rejoignez-nous