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);

...全文
295 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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位的内容吗?为啥后面的也显示出来了
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧