struct AA{
unsigned char day;
unsigned char month;
unsigned char year;
}a;
unsigned char b[]={1,2,3,4};
我想把b[2]开始两位复制到month开始两位,使用memcpy(&a+1,b+1,2);结果是错误的。我怀疑是&a+1的偏移量为一个结构体大小3,而非1.
那么要怎么定位month的地址呢?
struct AA{
unsigned char day;
unsigned char month;
unsigned char year;
}a;
unsigned char b[]={1,2,3,4};
我想把b[2]开始两位复制到month开始两位,使用memcpy(&a+1,b+1,2);结果是错误的。我怀疑是&a+1的偏移量为一个结构体大小3,而非1.
那么要怎么定位month的地址呢?
&a类型是AA*
,&a+1
会向后移动一个结构体的大小,很可能会覆盖其他的内存!!!
如果一定要这样赋值的话,将&a转为char*类型就行了,memcpy((char*)(&a) + 1, b + 1, 2)
。
强烈建议不要这样做!!!
3 回答2.1k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.3k 阅读✓ 已解决
3 回答3.5k 阅读
3 回答532 阅读✓ 已解决
1 回答3.3k 阅读
1 回答1.1k 阅读✓ 已解决
两位?两个 bit ?memcpy 是没有办法复制位的。所以这个操作的目的是啥?
不要怀疑了,这应该是 C 语言的常识,讲到指针的时候必然会介绍。
指针
p
做加减的时候,单位是sizeof(*p)
。p+1
会便宜sizeof(*p)
。&a.month