请问一个C/S的有关问题

请教一个C/S的问题
我的客户端发送数据如下:一个定长的结构,一个两字节字符串,一个定长的CString,一个int
typedef   struct    
{
int   length;
unsigned   char   ch;
}HEADER;
我的发送这样写
                  char   buf[50];
HEADER     myHeader   ;
                  myHeader.ch   = 'a ';
myHeader.length   =   3;
memcpy(buf,&myHeader,sizeof(HEADER));
memcpy(buf+sizeof(HEADER), "AB ",2);
                  CString   abc   =   "1234567890 ";
memcpy(buf+sizeof(HEADER)+2,&abc,abc.GetLength());
int   aaa   =   2;
memcpy(buf+sizeof(HEADER)+2+abc.GetLength(),&aaa,sizeof(int));
                  int   nRet   =   m_Client.SendData(buf,   50,   3);
接收方这样写:nRet   =   m_Server.ReadData(buf,   250,   60);
                            buf[nRet]   =   0;
          HEADER   *   pHeader   =NULL;
          pHeader   =   (HEADER*)buf;
          char   AB[2];
          memcpy(AB,buf+sizeof(HEADER),2);
          CString   abc;
                            memcpy(&abc,buf+sizeof(HEADER)+2,10);
现在我的结构可以正常的读出来,可是为什么读出来的字符串和CString都不对?谢谢!

------解决方案--------------------
CString是有自己内部构造的对象,怎么能这样强暴地往里写?
memcpy(&abc,buf+sizeof(HEADER)+2,10);
改用构造函数来构造吧:
CString abc(buf + sizeof(HEADER) + 2, 10);