typedef struct arphdr                 
{
    unsigned short  arp_hdr;
    unsigned short  arp_pro;
    unsigned char   arp_hln;
    unsigned char   arp_pln;
    unsigned short  arp_opt;
    unsigned char   arp_sha[6];
    unsigned long   arp_spa;
    unsigned char   arp_tha[6];
    unsigned long   arp_tpa;
}ARPHDR,*PARPHDR;
结构体的长度是多少?怎么我用sizeof(ARPHDR)求出来是32啊?好像是28吧,我用的VC6.0

解决方案 »

  1.   

    搜索结构题对齐
    typedef struct arphdr                 
    {
        unsigned short  arp_hdr;
        unsigned short  arp_pro;
        unsigned char   arp_hln;
        unsigned char   arp_pln;
        unsigned short  arp_opt;
        unsigned char   arp_sha[6];《===这里补齐 有2个字节空位
        unsigned long   arp_spa;
        unsigned char   arp_tha[6];<<<这后面有2个字节空位
        unsigned long   arp_tpa;
    }ARPHDR,*PARPHDR; 
      

  2.   

    你目前的系统是4字节对其的:
    typedef struct arphdr                  

        unsigned short  arp_hdr;        //
        unsigned short  arp_pro;        // 前2个占用4个字节    unsigned char   arp_hln;        //
        unsigned char   arp_pln;        //
        unsigned short  arp_opt;        // 
        unsigned char   arp_sha[6];     // 需要2*4 = 8个字节
        unsigned long   arp_spa;        // 需要4个字节
        unsigned char   arp_tha[6];     // 需要2*4 = 8个字节
        unsigned long   arp_tpa;        // 需要4个字节
    }ARPHDR,*PARPHDR; 可以用#progma pack(n)来改变字节对齐,n需要的对齐字节数
      

  3.   

    我写了一篇关于内存对齐的文章,欢迎你去看看,顺便提些建议。
    http://cjj.cublog.cn
    在编译分类里面。
    别忘记给点分哦