急!!memcpy()的奇怪问题,大侠们快来就我!!!50分!!! memcpy()也会出错?没碰到过:( 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 typedef struct{ BYTE aByte;} MYSTRUCT1;typedef struct{ MYSTRUCT1 Struct1; BYTE aByte;} MYSTRUCT2;BYTE Buf[1024];MYSTRUCT2 Struct2;Struct2.Struct1.aByte = 1;Struct2.aByte = 1;memset(Buf,0,sizeof(Buf));memcpy(Buf,&Struct2,sizeof(Struct2)); memset好像不太好用,以前我用过它不是api函数,是c runtime 函数,你用zeromemory和copymemory试试 memcpy我原来也用过,问题应该不是很大,仔细调试一下,对照内存中的内容是不是一样?我怀疑是不是结构STRUCT2中用的是STRUCT1的指针? 还有,你在用sizeof的时候最好用sizeof(MYSTRUCT2),以免你在定义时用的是指针,用sizeof取变量的位数时只能得到4。 memcpy有什么问题?我用了无数次。memcpy(Buf,Struct2,sizeof(Struct2)); 试试 怪事,怪事,我用你的代码,在Buf[0]和Buf[1]的位置准确无误的看到了两个1,而其后全部是0;sizeof(MYSTRUCT1)与sizeof(MYSTRUCT2)也正常的返回了1和2。一切都没有问题。不明白你怎么就不行? 我没发现memcpy出过错,我经常使用memcpy COPY各种各样的东西。 to tryibest(编の魂)、yy23rock(云云): 多谢了!我试试先。我贴出来的代码只是示意性的,实际的代码很长但思想差不多,都是结构里套结构,只不过实际代码里的结构很多,而且是多层嵌套memcpy()复制后的结果就是不同,我差不多已经绝望了。 我发现一个奇怪问题我定义了一个指向该结构的指针并分配内存这时使用memcpy()把结构中的数据复制到指针中,得到的结果是正确的但再把指针中的内容复制到buf中时buf中的内容就不对了难道是我分配buf的那一段内存有问题?还是我分配buf的方法有问题?我曾经试过用指针来代替buf,但还是不行:( 如果去掉memcpy(buf,&Struct2,sizeof(Struct2));中的&那么就无法通过编译,使用强制类型转换(char*)也无法通过编译 偶猜你的buf分配的有问题,可能无效。偶以往是这么用的,这么分配应该是保险的。BYTE HUGEP* pBufferTemp;pBufferTemp = (BYTE*)::GlobalAlloc(GMEM_FIXED, dwTotalLength);memcpy(pBufferTemp,pDataBuffer, dwTotalLength); 现在我发现问题了,我的实际程序里的结构里有两个字段值分别为1和2,转换成2进制就是0001和0010,在buf里有一个4和一个8,转换成2进制就是0100和1000。也就是说,数据复制到buf里以后,错位了2个bit。我虽然找到了问题,但还是解决不了。还得靠大家帮忙。 其实,我的程序里的结构是很大的有400多个字节,但奇怪的是复制过去的内容开头是对的,后边就不对了,错位了两个bit,在结构的定义中(不是我写的),用到了很多域位,我不明白是什么意思。eg.typedef { BYTE aByte:1; BYTE bByte:2; BYTE cByte:7; ...}MYSTRUCT; 看看是不是BYTE 和char 的转换问题!关注! 我猜测是由于“域位”的问题。因为BYTE和char都是1字节,有错误也应该是1字节但现在是错位2bit 如你所说:typedef { BYTE aByte:1; BYTE bByte:2; BYTE cByte:7; ...}MYSTRUCT; aByte 与bByte其实在同一个byte(8bit)中另外,你如何判断copy时出了错?debug时对比了两块memory确实不一样吗? to abentu: 原来使用“域位”是这样的效果啊,我一点都不懂。 现在有点明白了。 我是在Debug时直接察看内存的内容。 早把typedef贴出来就行了,呵呵 请教一个opencv的问题? 为什么对话框无法添加控件变量? 请教一个关于CListCtrl的问题,希望大虾们能帮帮小弟!!!! 获取网卡列表的函数有哪些 求一幅没有经过压缩的PNG图片 《VTK和ITK开发指南》读者调查表 按扭获得了焦点(setfocus())后,然后按回车,为什么不能触发按键事件,却把dialog关掉了。 服务器主动关闭套接字,如何避免与处理?? 请问如何能够获得一个控件的句柄? 刚找到的非常好的VC插件-Visual Assist X10.4.1649.正式版 串行口是什么意思?请举例。我看计算机的接口都有八个洞,就是并行口吗? 如何更改一个文件的创造时间、修改时间
BYTE aByte;
} MYSTRUCT1;
typedef struct{
MYSTRUCT1 Struct1;
BYTE aByte;
} MYSTRUCT2;BYTE Buf[1024];MYSTRUCT2 Struct2;
Struct2.Struct1.aByte = 1;
Struct2.aByte = 1;memset(Buf,0,sizeof(Buf));
memcpy(Buf,&Struct2,sizeof(Struct2));
它不是api函数,是c runtime 函数,
你用zeromemory和copymemory试试
我怀疑是不是结构STRUCT2中用的是STRUCT1的指针?
我用了无数次。
memcpy(Buf,Struct2,sizeof(Struct2));
试试
多谢了!我试试先。我贴出来的代码只是示意性的,实际的代码很长
但思想差不多,都是结构里套结构,只不过实际代码里的结构很多,而且是多层嵌套
memcpy()复制后的结果就是不同,我差不多已经绝望了。
我定义了一个指向该结构的指针并分配内存
这时使用memcpy()把结构中的数据复制到指针中,得到的结果是正确的
但再把指针中的内容复制到buf中时buf中的内容就不对了
难道是我分配buf的那一段内存有问题?还是我分配buf的方法有问题?
我曾经试过用指针来代替buf,但还是不行:(
那么就无法通过编译,使用强制类型转换(char*)也无法通过编译
BYTE HUGEP* pBufferTemp;
pBufferTemp = (BYTE*)::GlobalAlloc(GMEM_FIXED, dwTotalLength);
memcpy(pBufferTemp,pDataBuffer, dwTotalLength);
还得靠大家帮忙。
eg.
typedef {
BYTE aByte:1;
BYTE bByte:2;
BYTE cByte:7;
...
}MYSTRUCT;
因为BYTE和char都是1字节,有错误也应该是1字节
但现在是错位2bit
typedef {
BYTE aByte:1;
BYTE bByte:2;
BYTE cByte:7;
...
}MYSTRUCT;
aByte 与bByte其实在同一个byte(8bit)中
另外,你如何判断copy时出了错?debug时对比了两块memory确实不一样吗?
原来使用“域位”是这样的效果啊,我一点都不懂。
现在有点明白了。
我是在Debug时直接察看内存的内容。