//CMS流水
typedef struct _CMSWaste
{
    TDevInfo DevInfo;
    char Content[1024];
    int Light;
    char Re1[20];
    char Re2[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);

解决方案 »

  1.   


    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);  //此处不应该只显示这10位的内容吗?为啥后面的也显示出来了
    }
      

  2.   

    ErrorReport("DevCode:%s", DevCode);
    这个好像把数组之外的也打印出来了
      

  3.   

    DevInfo定义如下
    typedef struct _DevInfo
    {
    BYTE DevType;
    char DevCode[10];
    char CheckTime[14];
    char ErrorStatus[20];
    int CheckError;
    }TDevInfo;
      

  4.   

    今天心情高兴,就传授楼主一招吧
    能不能学会全是你自己的造化了typedef struct _CMSWaste
    {
        TDevInfo DevInfo;
        char Content[1024];
        char rev1;
        int Light;
        char Re1[20];
        char rev2;
        char Re2[20];
        char rev3;
    }TCMSWaste;假设TCMSWaste xxx;
    每次操作的赋值之前
    都要记得memset(xxx,0,sizeof(xxx));
    或者;
    xxx.rev1=xxx.rev2=xxx.rev3=0;
      

  5.   

    ErrorReport("DevCode:%s", DevCode);  
    DevCode 并不是字符串
    你现在把它当字符串用了 
    字符串 以0结尾
    如果 DevCode 中间有0 也会提前结束的 不会打印后面内容
    反之 就是你这种情况了……