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

shuihan20e 2013-01-27 03:34:02
//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);

...全文
225 8 点赞 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mhhaifeng 2013-01-31
ErrorReport("DevCode:%s", DevCode); DevCode 并不是字符串 你现在把它当字符串用了 字符串 以0结尾 如果 DevCode 中间有0 也会提前结束的 不会打印后面内容 反之 就是你这种情况了……
  • 打赏
  • 举报
回复
zhangyihu321 2013-01-30
先分11个 在全部清零 如果要使用前十个应该就没有了,主要原因是字符串以0结尾
  • 打赏
  • 举报
回复
shuihan20e 2013-01-28
引用 4 楼 flydreamGG 的回复:
DevCode[9]='\0'
啥意思
  • 打赏
  • 举报
回复
gz_qmc 2013-01-28
今天心情高兴,就传授楼主一招吧 能不能学会全是你自己的造化了 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;
  • 打赏
  • 举报
回复
昨夜无风 2013-01-27
DevCode[9]='\0'
  • 打赏
  • 举报
回复
shuihan20e 2013-01-27
DevInfo定义如下
typedef struct _DevInfo
{
	BYTE DevType;
	char DevCode[10];
	char CheckTime[14];
	char ErrorStatus[20];
	int CheckError;
}TDevInfo;
  • 打赏
  • 举报
回复
shuihan20e 2013-01-27
ErrorReport("DevCode:%s", DevCode); 这个好像把数组之外的也打印出来了
  • 打赏
  • 举报
回复
shuihan20e 2013-01-27

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位的内容吗?为啥后面的也显示出来了
}
  • 打赏
  • 举报
回复
相关推荐
发帖
网络编程
加入

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2013-01-27 03:34
社区公告
暂无公告