MyException - 我的异常网
当前位置:我的异常网» VC/MFC » memset分配十,memcpy拷贝10,为啥还有乱码

memset分配十,memcpy拷贝10,为啥还有乱码

www.MyException.Cn  网友分享于:2013-02-20  浏览:58次
memset分配10,memcpy拷贝10,为啥还有乱码
//CMS流水
typedef struct _CMSWaste
{
    TDevInfo DevInfo;
    char Content[1024];
    int Light;
    char Remark1[20];
    char Remark2[20];
}TCMSWaste;


TCMSWaste cmswaste;
memset(&cmswaste, 0, sizeof(TCMSWaste));
int retcms = m_peer[i]->ReadData((char*)&cmswaste, sizeof(TCMSWaste));
if (retcms < 0)
{
    //读取CMS包错误
    //ErrorReport("读取CMS包错误");
    ReleaseCritical();
    continue;
}
else if (retcms == 0)
{
    ReleaseCritical();
    continue;
}
ErrorReport("收到(IP:%s)发送的CMS数据", ip);
 
if ((m_DbOper.HandleCMSMsg(cmswaste))&&(m_DbOper.HandleCMSErrorMsg(cmswaste)))
{
    ErrorReport("处理CMSMsg成功");
    //返回成功信息
    m_peer[i]->SendData("OKOK", 4);
}
else
{
    ErrorReport("处理CMSMsg失败");
    m_peer[i]->SendData("ERRO", 4);
    //断开连接
    m_peer[i]->FreePeer();
}


BOOL CPRJ_DbOperate::HandleCMSMsg(TCMSWaste &cms)
{
ErrorReport("HandleCMSMsg");
char DevCode[10];
memset(DevCode, 0, sizeof(cms.DevInfo.DevCode));
memcpy(DevCode, cms.DevInfo.DevCode, sizeof(cms.DevInfo.DevCode));
ErrorReport("DevCode:%s", DevCode);


------解决方案--------------------
DevCode[9]='\0'
------解决方案--------------------
今天心情高兴,就传授楼主一招吧
能不能学会全是你自己的造化了

typedef struct _CMSWaste
{
    TDevInfo DevInfo;
    char Content[1024];
    char rev1;
    int Light;
    char Remark1[20];
    char rev2;
    char Remark2[20];
    char rev3;
}TCMSWaste;

假设TCMSWaste xxx;
每次操作的赋值之前
都要记得

memset(xxx,0,sizeof(xxx));
或者;
xxx.rev1=xxx.rev2=xxx.rev3=0;
------解决方案--------------------
先分11个 在全部清零   如果要使用前十个应该就没有了,主要原因是字符串以0结尾
------解决方案--------------------
ErrorReport("DevCode:%s", DevCode);  
DevCode 并不是字符串
你现在把它当字符串用了 
字符串 以0结尾
如果 DevCode 中间有0 也会提前结束的 不会打印后面内容
反之 就是你这种情况了……

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有