memcpy()也会出错?没碰到过:(

解决方案 »

  1.   

    typedef struct{
      BYTE aByte;
    } MYSTRUCT1;
    typedef struct{
      MYSTRUCT1 Struct1;
      BYTE aByte;
    } MYSTRUCT2;BYTE Buf[1024];MYSTRUCT2 Struct2;
    Struct2.Struct1.aByte = 1;
    Struct2.aByte = 1;memset(Buf,0,sizeof(Buf));
    memcpy(Buf,&Struct2,sizeof(Struct2));
      

  2.   

    memset好像不太好用,以前我用过
    它不是api函数,是c runtime 函数,
    你用zeromemory和copymemory试试
      

  3.   

    memcpy我原来也用过,问题应该不是很大,仔细调试一下,对照内存中的内容是不是一样?
    我怀疑是不是结构STRUCT2中用的是STRUCT1的指针?
      

  4.   

    还有,你在用sizeof的时候最好用sizeof(MYSTRUCT2),以免你在定义时用的是指针,用sizeof取变量的位数时只能得到4。
      

  5.   

    memcpy有什么问题?
    我用了无数次。
    memcpy(Buf,Struct2,sizeof(Struct2)); 
    试试
      

  6.   

    怪事,怪事,我用你的代码,在Buf[0]和Buf[1]的位置准确无误的看到了两个1,而其后全部是0;sizeof(MYSTRUCT1)与sizeof(MYSTRUCT2)也正常的返回了1和2。一切都没有问题。不明白你怎么就不行?
      

  7.   

    我没发现memcpy出过错,我经常使用memcpy COPY各种各样的东西。
      

  8.   

    to tryibest(编の魂)、yy23rock(云云):
      多谢了!我试试先。我贴出来的代码只是示意性的,实际的代码很长
    但思想差不多,都是结构里套结构,只不过实际代码里的结构很多,而且是多层嵌套
    memcpy()复制后的结果就是不同,我差不多已经绝望了。
      

  9.   

    我发现一个奇怪问题
    我定义了一个指向该结构的指针并分配内存
    这时使用memcpy()把结构中的数据复制到指针中,得到的结果是正确的
    但再把指针中的内容复制到buf中时buf中的内容就不对了
    难道是我分配buf的那一段内存有问题?还是我分配buf的方法有问题?
    我曾经试过用指针来代替buf,但还是不行:(
      

  10.   

    如果去掉memcpy(buf,&Struct2,sizeof(Struct2));中的&
    那么就无法通过编译,使用强制类型转换(char*)也无法通过编译
      

  11.   

    偶猜你的buf分配的有问题,可能无效。偶以往是这么用的,这么分配应该是保险的。
    BYTE HUGEP* pBufferTemp;
    pBufferTemp = (BYTE*)::GlobalAlloc(GMEM_FIXED, dwTotalLength);
    memcpy(pBufferTemp,pDataBuffer, dwTotalLength);
      

  12.   

    现在我发现问题了,我的实际程序里的结构里有两个字段值分别为1和2,转换成2进制就是0001和0010,在buf里有一个4和一个8,转换成2进制就是0100和1000。也就是说,数据复制到buf里以后,错位了2个bit。我虽然找到了问题,但还是解决不了。
    还得靠大家帮忙。 
      

  13.   

    其实,我的程序里的结构是很大的有400多个字节,但奇怪的是复制过去的内容开头是对的,后边就不对了,错位了两个bit,在结构的定义中(不是我写的),用到了很多域位,我不明白是什么意思。
    eg.
    typedef {
      BYTE aByte:1;
      BYTE bByte:2;
      BYTE cByte:7;
      ...
    }MYSTRUCT; 
      

  14.   

    看看是不是BYTE 和char 的转换问题!关注!
      

  15.   

    我猜测是由于“域位”的问题。
    因为BYTE和char都是1字节,有错误也应该是1字节
    但现在是错位2bit
      

  16.   

    如你所说:
    typedef {
      BYTE aByte:1;
      BYTE bByte:2;
      BYTE cByte:7;
      ...
    }MYSTRUCT; 
    aByte 与bByte其实在同一个byte(8bit)中
    另外,你如何判断copy时出了错?debug时对比了两块memory确实不一样吗?
      

  17.   

    to abentu:
      原来使用“域位”是这样的效果啊,我一点都不懂。
      现在有点明白了。
      我是在Debug时直接察看内存的内容。
      

  18.   

    早把typedef贴出来就行了,呵呵