//文件收发请求包
struct FILEREQUEST
{
int ID;
CString m_FileName;
CString m_FileExt; //文件扩展名
DWORD m_FileSize;
};char *buf;
buf = new char (sizeof(char) * sizeof(FILEREQUEST));
//省略。
recv(s,buf, sizeof(char) * sizeof(FILEREQUEST),0);//到这里都一切正常//这里就不正常了ID收到为正常数据,文件大小也收到了正常数据,就两个CString 变量收到的是“” 空字符
//这是啥原因啊??CString 与 char 的问题么??而且到了这里会出现内存访问出错的提示
//FileMove.exe 中的 0x6318dffe (mfc90ud.dll) 处未处理的异常: 0xC0000005: 读取位置 0x002fc070 时发生访问冲突
//CSimpleStringT& operator=( _In_ const CSimpleStringT<BaseType, !t_bMFCDLL>& strSrc )这就是出错的函数
FILEREQUEST fileRequest;
fileRequest.ID         = ((FILEREQUEST*)buf)->ID;
fileRequest.m_FileName = ((FILEREQUEST*)buf)->m_FileName;
fileRequest.m_FileExt  = ((FILEREQUEST*)buf)->m_FileExt;
fileRequest.m_FileSize = ((FILEREQUEST*)buf)->m_FileSize;//这就是上面出错函数的代码,,atlsimpstr.h 系统自带的函数,我看不太懂
CSimpleStringT& operator=( _In_ const CSimpleStringT<BaseType, !t_bMFCDLL>& strSrc )
{
CStringData* pSrcData = strSrc.GetData();
CStringData* pOldData = GetData();
if( pSrcData != pOldData)
{
if( pOldData->IsLocked() || pSrcData->pStringMgr != pOldData->pStringMgr )
{
SetString( strSrc.GetString(), strSrc.GetLength() );
}
else
{
CStringData* pNewData = CloneData( pSrcData );
pOldData->Release();
Attach( pNewData );
}
} return( *this );
}
不明原因,求解~~~

解决方案 »

  1.   

    出错位置VS2008 指向的是 
    if( pOldData->IsLocked() || pSrcData->pStringMgr != pOldData->pStringMgr )
    这一句~~~先出门了。。中午回来看,,求大神指点~~~
      

  2.   

    struct FILEREQUEST
    {
        int ID;
        CString m_FileName;
        CString m_FileExt; //文件扩展名
        DWORD m_FileSize;
    };不要用CString,用char chFileName[260],CString是对象类型,不能用于网络传输
      

  3.   

    字符串变量保存的只是指针地址,具体字符串在这个指针所指的地址处,你这样定义结构,把远程的地址发过来,想在本地访问,肯定会报非法访问异常的。大概应该这样:
    struct FILEREQUEST
    {
        int ID;
        int nFileNameLen;
        char m_FileName[260];
        int nFileExtLen;
        char m_FileExt[260];
        DWORD m_FileSize;
    };
      

  4.   

    CString是对象类型,不能用于网络传输////////////////////不是对象类型的问题,是指针传输的问题2台机器对应的内存地址不同,导致异常。CString实际实现 ,是一个指针。因此在传输指针对象时,要copy值,而不是地址。
      

  5.   

    谢谢各位,,,问题已解决结贴~~~~但CString 与 char的转换又让人头痛了先结了吧。。