关于memcpy的一个问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 10:01:40
char tm[6] = {1,2,3,4,5,6,6}
struct pre
{
char data[3];
char data1[3];
} p;
memcpy(&p + 3, tm + 3, 3);
为什么不能用?
请问高手,这个问题有什么好办法解决?

#include <memory.h>

main()
{
char tm[6] = {1,2,3,4,5,6} ;
struct pre
{
char data[3];
char data1[3];
} p;
memcpy(&p + 3, tm + 3, 3);
}
这段程序是可以编译通过,也可以运行的,只是目的没有达到。
因为&p是结构体的指针,它加1表示向后编译一个结构体所占用的内存宽度
由于data和data1都是3个char类型元素的数组,也就是每次偏移6个字节
所以&p + 3,向后偏移了3×6=18个字节了

题目的意思可能是memcpy(p.data1, tm + 3, 3);
这样写memcpy((char*)&p + 3, tm + 3, 3);就可以了
它先把结构体指针p转换为char*类型的指针

要添加头文件。
#include<memory.h>