Supposons que je struct Foomeilleure façon de se référer à la taille de la structure (#pragma pack VS taille définie)
struct Foo{
int a;
short b;
char c;
};
Et je doit écrire ce struct pour n/w tampon. J'ai besoin de connaître la taille de cette structure. Dans mon environnement, sizeof (Foo) renvoie 8, c'est ok, je comprends.
Ce sont deux façons de se référer à la taille exacte que je veux écrire dans la mémoire tampon
1. #define SIZEOF_FOO 7
, et utiliser ce lieu de sizeof(Foo)
2. En utilisant #pragma pack
je peux utiliser sizeof(Foo)
qui sera retour 7
Lequel est le meilleur moyen de le faire, ou Y at-il un autre moyen de le faire?
Quelle est votre intention? Connaître la taille de Foo à tout moment, ou forcer la taille de Foo à une certaine valeur? En effet, sizeof (Foo) renvoie la taille réelle de Foo, et votre espérance d'être à 7 est fausse. Vous devez écrire le nombre réel d'octets dans le tampon, pas le nombre que vous souhaitez que la structure soit. En outre, l'utilisation de constantes ne garantit pas que l'expéditeur et le destinataire ont la même taille de Foo. – mbaitoff
Eh bien, le point est le récepteur est dans le système différent, et il s'attend à ce que les 4 premiers octets soient "une" valeur, et ainsi de suite, 2 octets sont "b", 1 octet suivant est c. C'est le problème quand il ajoute padding 0 après "c" en ce qui concerne la taille d'écriture 8 (de sizeof) au lieu de 7. Et il corrompre le flux de tampon. – Summerpinn