crocejf2000
Messages postés260Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention27 août 2008
-
14 mars 2003 à 10:07
crocejf2000
Messages postés260Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention27 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 ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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...
crocejf2000
Messages postés260Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention27 août 20081 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 !