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中的数据时,总是显示一样的,不知道为什么??
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中的数据时,总是显示一样的,不知道为什么??
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掉。