我定义了一个 char 数组  char data[1024]
另外定义了一个结构
typedef struct
{
   char a;
   char b;
   char c;
   char d[25];
}RData,*p_RData;在程序中我定义 RData rData;
我想从data数组的36个元素起拷贝到 结构体rData中
我使用 memcpy(&rData,&data[36],sizeof(rData));
这种方法 但是行不通 不知道为什么?data数组中的数据 是从SOCKET 中Rev到的
调试的时候可以监视到里面的值 而且也可以输出
但是 拷贝付值的时候 总是不行哪位高人指点一下啊 不胜感激

解决方案 »

  1.   

    memcpy(&rData,&data+36,sizeof(rData)); 
      

  2.   

    memcpy(&rData,data+36,sizeof(rData)); 肯定可以。你试试。
      

  3.   

    试过 都不行啊 不是data的问题 而是rData的问题 无法写入
    而且 在RELEASE调试过程中 VC编辑器这句旁边有个 绿条  并且 单步执行的时候
    这句memcpy(&rData,data+36,sizeof(rData));  就直接跳到了下一语句去了 没有执行
    在DEBUG调试中 编译没有问题 按F5调试的时候 弹出一个断言错误
    跟踪后是
    _AFXWIN_INLINE int CWnd::SetWindowRgn(HRGN hRgn, BOOL bRedraw)
    { ASSERT(::IsWindow(m_hWnd)); return ::SetWindowRgn(m_hWnd, hRgn, bRedraw); }
    这个断言
    真不知道什么问题了
      

  4.   

    memcpy(data + 36, rData, sizeof(RData));
      

  5.   

    //更正一下:memcpy(data + 36, &rData, sizeof(RData));
      

  6.   

    这个断言应该是指窗口的句柄 m_hWnd 无效,窗口已经关闭了,还是窗口还没有创建?
      

  7.   

    可是在RELEASE中就没有这个问题 
    有没有可能电脑中了病毒而产生程序错误和调试问题?
      

  8.   

    因为 ASSERT 在 Release 版本下是无效的,所以不会错误。检查一下调用 SetWindowRgn 函数的地方。
      

  9.   

    更正。memcpy(data + 36, rData, sizeof(RData));
      

  10.   

    ASSERT 检查这咯, 但我不明白你说 的不行是什么意思啊,memcpy执行后肯定是会复制数据过去的呀
      

  11.   

    memcpy(&rData,data+36,sizeof(rData)); 试过了,成功。
    char data[4];
    data[0]='0';
    data[1]='1';
    data[2]='2';
    data[3]='3';
    typedef struct 

    char a; 
    char b; 
    char c; 
    char d[25]; 
    }RData,*p_RData;
    RData  rdata;

    memcpy(&rdata,data+1,sizeof(rdata));
    cout<<rdata.a<<endl;
    cout<<rdata.b<<endl;
    cout<<rdata.c<<endl;
    cout<<rdata.d<<endl;
      

  12.   

    你这里有2个问题,
    1 你说的那个调试出错问题是因为窗口已经被析构了,或者你内存误操作把句柄给覆盖了,你自己去找吧。
    2 你说的拷贝的问题,说明你对字符串操作的概念不明白它的实质。
    把那几行代码换成如下:
    char szData[1024]="012345678901234567890123456789";
    RData rData;
    memset((void*)&rData,0,sizeof(rData));
    memcpy((void*)&rData,(void*)szData,sizeof(rData)-1)//关键理解这里跟你的代码有何区别还有最重要一点,任何变量再使用之前一定注意要初始化,这个风格你一定要养成。切忌