memcpy的问题,在线等.请高手帮忙啊

yfd08net 2005-03-09 09:54:35
我用memcpy拷贝的时候发现.我的变量中如果有'\0'.memcpy就把这个东西认为结束了.结果东西每次都拷不完.
代码如下:
char cpy[]={0xC1,0x41,0x53,0x00,0x21,0x00,0x22,0x00,0x23,0x51,0x10,0x0c,0x4c,0x98,0x3a};
char datapart[]="abcdefghijklmnopqrstuvwxyz0123456789";
memcpy(datapart,cpy,sizeof(cpy));
datapart的内容只有前三个字节的内容.
有什么办法可以把cpy的内容全部写到datapart中;;;
...全文
133 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yfd08net 2005-03-09
  • 打赏
  • 举报
回复
我问题上的代码好像.但是我换了一种方式就不行了.代码如下
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中
mdzhao 2005-03-09
  • 打赏
  • 举报
回复
mark
YuccaNJ 2005-03-09
  • 打赏
  • 举报
回复
是你的Watch窗口看不完吧。直接看DataPart[5]……DataPart[15],检查数据是不是正确。
zdleek 2005-03-09
  • 打赏
  • 举报
回复
肯定是楼主自己弄错了
memcpy(DataPart,cpy,sizeof(cpy));会把cpy的32bytes全部copy到datapart
但是如果楼主用strlen(DataPart) 或者 printf(“%s”,DataPart),
得到的长度当然只有
yfd08net 2005-03-09
  • 打赏
  • 举报
回复
To Aerith 你再试一下用这种
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中
Aerith 2005-03-09
  • 打赏
  • 举报
回复
我试了一下,strlen(cpy)==3 ,sizeof(cpy)==15,
写memcpy(datapart,cpy,sizeof(cpy));的时候,cpy的内容全部都拷贝到datapart里面去了!
是不是你后面取datapart的值的时候,因为第四个字节是0x00,所以后面的都没取到?
yfd08net 2005-03-09
  • 打赏
  • 举报
回复
to yang2003
strlen只能算出长度为3
yfd08net 2005-03-09
  • 打赏
  • 举报
回复
老大们.我指定了长度还是不行呀.还是只到0x00就结束了.
haizhiyu 2005-03-09
  • 打赏
  • 举报
回复
ayanamiwww(绫波) 说得对,
要做memcpy,必须指定长度,strlen(cpy)=3(遇0x00结束),sizeof(cpy)=4。
yang2003 2005-03-09
  • 打赏
  • 举报
回复
楼上说的是对的
memcpy(datapart,cpy,strlen(cpy));
yfd08net 2005-03-09
  • 打赏
  • 举报
回复
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));
这个样子也是一样的.只能拷前三个.气死了.
yfd08net 2005-03-09
  • 打赏
  • 举报
回复
我是要把cpy中的所以字符全部拷到datapart中.
ayanamiwww 2005-03-09
  • 打赏
  • 举报
回复
memcpy(datapart,cpy,sizeof(cpy));
长度指定有误
sizeof(cpy) 长度应该是4吧,你指定正确的长度就没有问题了。
Aerith 2005-03-09
  • 打赏
  • 举报
回复
char cpy[]={0xC1,0x41,0x53,0x00,0x21,0x00,0x22,0x00,0x23,0x00,0x51,0x10,0x0c,0x4c,0x98,0x3a};
char *DataPart = new char[32];
memset(DataPart,'E',32);
memcpy(DataPart,cpy,sizeof(cpy));

你的DataPart要先new一段空间出来才行,否则会出错。
你把DataPart的地址复制到Memory窗口里去查看,你就会看见其实都复制进去了的。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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