请大家帮忙看下下面的程序
每次运行到
memset(filebuf,0,sizeof(filebuf));//就出现下面的异常提示信息
server94.exe 中的 0x102308cf (msvcr80d.dll) 处未处理的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突int RecvData(SOCKET sock,char *data,DWORD filesize)
{
//recive the pack with fileinfo
char temp[TRANS_LENGTH]={0};
int recvbyte=0,tempbyte=0;
char *filebuf=NULL;
filebuf=(char*)malloc(filesize); 
if(filebuf=NULL)
{
printf("Cannot Allocation Space!");
return 0;//分配空间失败
}
memset(filebuf,0,sizeof(filebuf));//
while(recvbyte<filesize)
{
tempbyte=recv(sock,temp,TRANS_LENGTH,0);
recvbyte+=tempbyte;
strcat_s(filebuf,sizeof(filebuf),temp);
}
if(recvbyte==filesize)
{
strcpy_s(data,filesize,filebuf);
free(filebuf);
filebuf=NULL;
return 1;
}
else
return 0;
}

解决方案 »

  1.   

    在 win32 中,
    sizeof(filebuf) = 4一些地方需要用 fileSizememset/strcat_s
      

  2.   

    if (filebuf=NULL)
     应该修改成 
    if (filebuf == NULL)
      

  3.   

    filebuf是字符串,
    sizeof(filebuf) = 4?????
    怎么回呢
      

  4.   

    如果你定义 
    char filebuf[100];
    那么,sizeof(filebuf) 是 100;如果你定义
    char *filebuf;
    ...
    那么,sizeof(filebuf) 就是 sizeof(char *) ,在 win32 下等于 4
      

  5.   

    同意楼上,char *filebuf只是一个指针,它就是4个字节(32位),如果你定义的是字符串数组,C++会记录下它的大小,sizeof就是数组大小。如果想获得字符串长度用strlen()或直接filesize
    还有之所以错误,是你给filebuf=NULL了。
      

  6.   

    if (filebuf=NULL)
     应该修改成  
    if (filebuf == NULL)
    改了之后没有了,错误很低级啊,
    谢谢指点但是执行到strcat_s(filebuf,sizeof(filebuf),temp);这句时,又提示
    tcscat_s.inl
    Expression:(L"Buffer is too small" &&0)
    是怎么回事啊
      

  7.   

    前面已经告诉你了,sizeof(filebuf)只告诉你char*这个类型的大小,也就是4,你是无法用sizeof得到buffer的真实大小的,你应该把所有sizeof(filebuf)的代码都换成filesize
      

  8.   

    我把上边的这类改了之后
    还是执行到strcat_s(filebuf,filesize,temp);这句时,又提示
    tcscat_s.inl
    Expression:(L"Buffer is too small" &amp;&amp;0)
      

  9.   

    if(filebuf=NULL) .......if(!filedbuf)
    memset(filebuf,0,sizeof(filebuf));// 这儿filebuf的长度用sizeof可以得到么?
      

  10.   

    这个错误已改,改过后
    执行到strcat_s(filebuf,filesize,temp);这句时,又提示
    tcscat_s.inl
    Expression:(L"Buffer is too small" &&0)
    strcat_s()参数filesize应该是strlen(filebuf)+strlen(temp)呢,还是
    只要filesize>strlen(temp)就可以了如果我把链接放到循环中,每次strcat_s(filebuf,filesize,temp)就行了吗?中间每次连接的时候'\0'有没有加进去
      

  11.   

    文件缓冲区怎么能根据文件大小定呢,你当初malloc时不能用filesize啊。应该多给一些余量。