CObList UserList;
CSocket CAcceptSocket;
typedef struct user
{
OP_TYPE optype;
char login_name[100];
char ip[50];
}USER;//我自定义的结构。
void CAcceptSocket::OnReceive(int nErrorCode)
{
  char buf[1024];
  Receive(buf,sizeof(buf),0);
  USER *puser;
  puser=(USER*)buf;
  UserList.AddTail((CObject*)puser);
  POSITION pos=UserList.GetHeadPosition();
  while(pos)
  {
   USER *temp_head=(USER *)UserList.GetNext(pos);
   AfxMessageBox(temp_head->login_name);
  }
  UserList.AddTail((CObject*)puser);
}
问题是:为什么我在检验UserList中的数据时,总是显示一样的,不知道为什么?? 

解决方案 »

  1.   

    char buf[1024];
      Receive(buf,sizeof(buf),0);
      USER *puser;
      puser=(USER*)buf;这样写不对的!你可以象下面这样:char buf[1024];
    Receive(buf,sizeof(buf),0);
    USER* pUser;
    pUser=new USER;
    if(strlen(buf)>99)
      strncpy(pUser->login_name,buf,99);
    else
     strcpy(pUser->login_name,buf);//Other two field
    //pUser->optype=
    //pUser->ip=
    UserList.AddTail(pUser)如果你的UserList是CObjectList,那你的USER应从CObject派生。如果你不想将USER从CObject派生,你可以如此定义UserList.#include <afxtempl.h>....
    CList<USER*,USER*> UserList.当然,如果你不想自己new和delete内存。你可以定义成
    CList<USER,USER> UserList;有关部分进行一定调整。另外,最后,记得前面new出来的东东delete掉。