我定义了如下结构
typedef struct
{
UINT i1;
UINT i2;//
UINT i3;
char s[6];
} mymsg;我用sizeof函数计算的长度为什么不对呢?int len = sizeof(mymsg);执行时len=20;
应该是18才对呀,
请问这是为什么啊?

解决方案 »

  1.   

    32位机先是至少用四个字节!char s[6]中虽然只需1*6=6个字节,
    但必须是4的整数倍,
    由此,共需8+3*4=12个字节!
      

  2.   

    32位机至少用四个字节!char s[6]中虽然只需1*6=6个字节,
    但必须是4的整数倍,
    由此,共需8+3*4=20个字节!
      

  3.   

    #pragma pack(1)
    typedef struct
    {
    UINT i1;
    UINT i2;//
    UINT i3;
    char s[6];
    } mymsg;
    #pragma pack()
    这时候就是18了
    #pragma pack(4)
    typedef struct
    {
    UINT i1;
    UINT i2;//
    UINT i3;
    char s[6];
    } mymsg;
    #pragma pack()
    这时候就是20了
      

  4.   

    同意fingerfox,其实也可以在Setting中修改编译器的字节对齐选项。
      

  5.   

    davehuhudave(陈郑华)说得对!
    32位机至少用四个字节!char s[6]中虽然只需1*6=6个字节,
    但必须是4的整数倍,
    由此,共需8+3*4=20个字节!
      

  6.   

    setting->c/c++->category:code generation->struct member alignment
      

  7.   

    同意: Forgis(博乐) 
    setting->c/c++->category:code generation->struct member alignment
    这里是设置字节对齐,你一定设置了8Byte*,所以char s[6];实际上所占用的空间是8,而不是6