请教memcpy后有多余的空格

book_mclmcl 2010-01-04 03:02:22
代码如下:
char* pchSeri = new char[m_nSeriNumLen];
memset(pchSeri, 0, m_nSeriNumLen);
memcpy(pchSeri, pChar, m_nSeriNumLen);

问题是,拷贝后,pchSeri的长度比m_nSeriNumLen 多出12,调试发现多出的为6个空格,看似是空格,每个空格长度为2。ascal码为-85等
pChar为读取的二进制文件内容指针,vc6平台
请问是怎么回事?如何解决?
谢谢!
...全文
310 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jernymy 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 selooloo 的回复:]
或者改成这样
char* pchSeri = new char[m_nSeriNumLen+1];
memset(pchSeri, 0,m_nSeriNumLen+1);
memcpy(pchSeri, pChar, m_nSeriNumLen);

pchSeri的长度应该就不会多了
[/Quote]
xianyuxiaoqiang 2010-01-04
  • 打赏
  • 举报
回复
字符串结束符的问题。没有结束符,很多字符串处理函数会越界访问。
book_mclmcl 2010-01-04
  • 打赏
  • 举报
回复
谢谢大家,OK!
char* pchSeri = malloc(m_nSeriNumLen+1);
memset(pchSeri, 0, m_nSeriNumLen+1);
memcpy(pchSeri, pChar, m_nSeriNumLen);
cattycat 2010-01-04
  • 打赏
  • 举报
回复

memcpy(pchSeri, pChar, m_nSeriNumLen-1);
或者直接最后加一句 pchSeri[m_nSeriNumLen-1]='\0';
苍蝇①号 2010-01-04
  • 打赏
  • 举报
回复
pchSeri的长度比m_nSeriNumLen 多出12 ?
lz是通过strlen得到的吗?如果是这样的话参考楼上的修改
macrojj 2010-01-04
  • 打赏
  • 举报
回复
没有把\0拷贝进去。楼上那么做应该可以。或者直接pchSeri[m_nSeriNumLen]='\0'
hbvanguard 2010-01-04
  • 打赏
  • 举报
回复
应该是长度越界了,
char* pchSeri = new char[m_nSeriNumLen]; 定义了一个大小为m_nSeriNumLen-1的数组
memset(pchSeri, 0, m_nSeriNumLen) 初始化了大小为m_nSeriNumLen的数组,这里越界了
selooloo 2010-01-04
  • 打赏
  • 举报
回复
或者改成这样
char* pchSeri = new char[m_nSeriNumLen+1];
memset(pchSeri, 0, m_nSeriNumLen+1);
memcpy(pchSeri, pChar, m_nSeriNumLen);

pchSeri的长度应该就不会多了
selooloo 2010-01-04
  • 打赏
  • 举报
回复
改成这样看看
memcpy(pchSeri, pChar, m_nSeriNumLen-1);

你是不是用strlen计算长度的啊?
GKatHere 2010-01-04
  • 打赏
  • 举报
回复
UP
wzlhahr 2010-01-04
  • 打赏
  • 举报
回复
pchSeri申请空间时要多申请一个或两个(根据编码方式),多出的空间用于存放字符串结束标记
可以这样写
char* pchSeri = new char[m_nSeriNumLe+2];
memset(pchSeri, 0, m_nSeriNumLen+2);
memcpy(pchSeri, pChar, m_nSeriNumLen);
东大坡居士 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cattycat 的回复:]
memcpy(pchSeri, pChar, m_nSeriNumLen-1);
或者直接最后加一句 pchSeri[m_nSeriNumLen-1]='\0';
[/Quote]

恩嗯,因为没有结束符,打印的时候会继续向找到结束符为止,所以会多许多东西
yellowhwb 2010-01-04
  • 打赏
  • 举报
回复

char* pchSeri = malloc(m_nSeriNumLen+1);
memset(pchSeri, 0, m_nSeriNumLen+1);
memcpy(pchSeri, pChar, m_nSeriNumLen);

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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