做了一个动态库,和本问题有关的代码如下:
char* maildata;
......
void receive(SOCKET* msocket)
{
......
if(state=="retring")
{   
if(strstr(lpBuf,"\r\n.\r\n")!=NULL)
{    
strncpy(&maildata[strlen(maildata)],lpBuf,g-5);
state="retrok";
}
else
strcpy(&maildata[strlen(maildata)],lpBuf);
return;
}else
.......
if(state=="retr")

if(strstr(lpBuf,"\r\n.\r\n")!=NULL)
{
strncpy(maildata,strstr(lpBuf,"\r\n")+2,g-5);
state="retrok";
}
else
{
strcpy(maildata,strstr(lpBuf,"\r\n")+2);
state="retring";
}

}
     else
......
if(state=="listone")
{   
long xz=atol(strrchr(lpBuf,' ')+1);
maildata=new char[xz];      //问题在这一句 state="passok";
}
else......
}
xz是邮件长度(我发出 list 1命令,从回应信息+ok 1807中提取,即xz=1807,
),然后设state="retr",在state="retr"时,或等于retring时,将接收到的数据复制到datamail.
程序运行后,显示xxxxxxxxx内存不能读/写,于是我设long xz=atol(strrchr(lpBuf,' ')+1)*100;,加大xz,还是出错,一直我把xz设为6位数,例如999999,才不出错。
这是什么原因?我如何才能正确的给maildata分配内存?
此外,我发现邮件在存为eml文件后,它的字节数远远高于list命令得到的字节数,是怎么回事?(但不会高到6位数,往往高1k多字节)。