高兴指点memcpy的问题.在线等!!!

yfd08net 2005-03-09 11:57:58
char cpy[]={0xC1,0x41,0x53,0x00,0x21,0x00,0x22,0x00,0x23,0x00,0x51,0x10,0x0c,0x4c,0x98,0x3a};
char *DataPart;
memset(DataPart,'E',32);
memcpy(DataPart,cpy,sizeof(cpy));
这样子.只能拷前三个从第一0x00后面的都没有拷到datapart中,有没有办法把cpy中的数据全部拷到datapart中
...全文
212 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
blankman 2005-03-11
  • 打赏
  • 举报
回复
对了,建议看一下 C 的基础知识,

你那种写代码的方式会造成访问越界的,写缓冲区溢出程序倒是不错
blankman 2005-03-11
  • 打赏
  • 举报
回复
呵呵,楼上说的比楼主说的都全了,把你的问题解决了,

你潜在的问题也都顺便解决了,我就不多说了,结贴吧
holymoon858 2005-03-10
  • 打赏
  • 举报
回复
不过怎么处理呢.我要的就是要把cpy的'\0'也复制到datapart中

---------------------------------
memcpy是内存拷贝,是按照第3个参数的长度来进行,不是字符串拷贝(遇到'\0'就结束),所以
memcpy(DataPart,cpy,sizeof(cpy)); //是正确的,
但是你想查看DataPart的内容确不能用以下的方式:
printf("%s", DataPart); //查看不全
因为这样是以字符串方式查看,遇到'\0'就结束

如果要查看DataPart的全部内容,应该这样:
for(i = 0; i < sizeof(cpy); i++)
{
printf("[%02X]", DataPart[i]);
}


另外要指出的:

不过我在分配了空间还是一样的效果.所以就只贴了简短的一段代码出来

----------------------------------------------------------------

仅这样是不够的:
char *DataPart;

一定要为DataPart分配足够的内存才能用memcpy向里面拷贝,否则有内存错误!
僵哥 2005-03-09
  • 打赏
  • 举报
回复
应该是已经拷贝过去了,但是DataPart只是一个未分配内存的空指针,系统对它做操作时,认定第一个'\0'为它的结束点(结束符)。
netsys2 2005-03-09
  • 打赏
  • 举报
回复
char *DataPart = new char[80];

memset(DataPart,'E',32);
memcpy(DataPart,cpy,sizeof(cpy));

delete []DataPart;
cczlp 2005-03-09
  • 打赏
  • 举报
回复
DataPart应该申请内存了吧?
看来关键是 sizeof(cpy), 但我试验 sizeof(cpy) 值是16,没有问题。
onemonth 2005-03-09
  • 打赏
  • 举报
回复
呵呵,居然把题目看错了。
onemonth 2005-03-09
  • 打赏
  • 举报
回复
用memmove。memcpy做不了这事情。
Maconel 2005-03-09
  • 打赏
  • 举报
回复
因为你的DataPart是个char*型的,当你在断点时查看它的值时,bcb会把它当一个字符串来显示给你。
在添加监视的时候,可以选择查看的方式,有string,hex,default等。默认default时,bcb会按你变量类型自动给你选一个,在你这个情况就是string了。
用songhtao(三十年孤独) 说的方法查看下试试吧。或者简单的,查看一下DataPart[4]的值就可以。
Waiting4you 2005-03-09
  • 打赏
  • 举报
回复
TO:Maconel(Maconel)
我是在BCB中用断点跟踪查看他们的值的.应该不会存在你说的问题的.
-----------------------------------------------------------------------

已经拷过去了,不信可以调试时按Ctrl+F7调出Modify查DataPart[3]-DataPart[15]
yfd08net 2005-03-09
  • 打赏
  • 举报
回复
TO:Maconel(Maconel)
我是在BCB中用断点跟踪查看他们的值的.应该不会存在你说的问题的.
yfd08net 2005-03-09
  • 打赏
  • 举报
回复
不过我在分配了空间还是一样的效果.所以就只贴了简短的一段代码出来
yfd08net 2005-03-09
  • 打赏
  • 举报
回复
我也同意unsigned(僵哥)的说法
不过怎么处理呢.我要的就是要把cpy的'\0'也复制到datapart中
我不懂电脑 2005-03-09
  • 打赏
  • 举报
回复
同意unsigned(僵哥) ( ) 信誉:105
另外你的DataPart没有分配内存,这是很危险的。
你可以用调试器把dataPart添加入Watch监视列表然后观察把变量修改为DataPart[0] count置为80观看数组的值
Maconel 2005-03-09
  • 打赏
  • 举报
回复
应该是楼主查看的方法不对,可能是当字符串来查看了,那么程序会以为到0x00就结束了,后边的没有显示出来。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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