字节对齐的原因.加#pragma pack(1) 试下.

解决方案 »

  1.   

    当然加这个#pragma pack(1)不是很好,最好还是你自己调整结构吧.
      

  2.   

      结构体有字节对齐的加个#pragma pack(1) 试试
      

  3.   


    #pragma pack(1)
    typedef struct arphdr
    {
    unsigned char  arp_sha[6];
    unsigned long  arp_spa;
    }ARPHDR,*PARPHDR;
    #pragma pack()
      

  4.   

    说错了,呵呵unsigned long,4个字节。
      

  5.   

    没有影响吧,
    发送端这样拷贝
    memcpy(sendbuf,&arp,sizeof(arp)); 接收端再这样拷贝
    memcpy(&arp,recvbuf,sizeof(arp)); 是没有问题的啊
      

  6.   

    VC编译时默认把结构中的成员按照8字节来对齐,以免数据跨越8字节边界影响存取效率。你的结构中arp_sha[6]是6字节,编译时在后面自动留出了两字节,然后才是arp_spa,因为Debug版会把数据全部初始化为0xCC,所以你看到多出两个CC。这种编译方式通常是不影响程序正常运行的,不要管它。
      

  7.   

    release版的应该不做填充。
      

  8.   

    不应该是这样的。
    Release版的更注重执行效率,因此进行字节对齐的可能性更大,而不是更小。
      

  9.   

    使用该结构的之前memset一下就可以了。