none
memcpy赋值的问题 RRS feed

  • 问题

  • char *p;

    假如int dataLength;memcpy(&dataLength,p,sizeof(dataLength));这种用法可以。我也常这么用感觉蛮痛快的,一个程序里感觉值太多了就写了个结构体。如下面的用法,当单步调试到这得时候就死了,查了很多资料,问了很多人,总是不能给我一个很满意的答复,知道又要来微软论坛问各位老师了。

    memcpy(&pDataInfo->dataLength,p,sizeof(pDataInfo->dataLength));我想知道为什么这样用不行呢,最好能从底层跟我讲讲这个原因。多谢了

    2011年10月24日 13:33

答案

  • 看看你的pDataInfo是否是有效实例的指针。

     

    2011年10月25日 1:26
  • 可如果int dataLength只是声明单个变量的时候memcpy(&dataLength,p,sizeof(dataLength));可以用。

    我把dataLength放到结构体里memcpy(&pDataInfo->dataLength,p,sizeof(pDataInfo->dataLength));就出错了。我想知道为什么在结构体里就不能用了


    我验证过了,放在结构体里可以用啊,vs2010
    2011年10月30日 10:12

全部回复

  • 你的p是char型的

    dataLength我推测应该是int型的吧

    从char指针指向的位置拷贝4个字节出来肯定会有无法预期的行为


    新浪微博http://weibo.com/xianglitian,欢迎围观
    2011年10月25日 0:32
  • 可如果int dataLength只是声明单个变量的时候memcpy(&dataLength,p,sizeof(dataLength));可以用。

    我把dataLength放到结构体里memcpy(&pDataInfo->dataLength,p,sizeof(pDataInfo->dataLength));就出错了。我想知道为什么在结构体里就不能用了

    2011年10月25日 0:36
  • 看看你的pDataInfo是否是有效实例的指针。

     

    2011年10月25日 1:26
  • 可如果int dataLength只是声明单个变量的时候memcpy(&dataLength,p,sizeof(dataLength));可以用。

    我把dataLength放到结构体里memcpy(&pDataInfo->dataLength,p,sizeof(pDataInfo->dataLength));就出错了。我想知道为什么在结构体里就不能用了


    我验证过了,放在结构体里可以用啊,vs2010
    2011年10月30日 10:12