我具有函数,将整数数组的副本复制到向量中,该功能与std ::复制呼叫正常工作,但是当我更改std :: coppy to std :: memcpy时,它的工作状态不正常。有人可以指出我在做什么错吗?
void Walle_SSD1306::RadarD(uint8_t *RadarLL, uint8_t isFirstRadarLogo)
{
//Following two copy statement is working correctly
std::copy(
RadarLL+128
, RadarLL + 8192
, buffer.begin()+128
);
std::copy(
RadarLL+38
, RadarLL + 90
, buffer.begin()+38
);
//But when I change copy to memcpy following code is not working correctly
std::memcpy(
(buffer.begin()+128) , (RadarLL+128), (8192 - 128)*sizeof(uint8_t)
);
std::memcpy(
(buffer.begin()+38), (RadarLL+38), (52*sizeof(uint8_t))
);
//where buffer is...
std::vector<uint8_t> buffer;
std ::复制可以与迭代器一起使用,并支持缓冲区重叠memcpy仅与指针一起使用
使用memcpy中的表达式buffer.begin()+128
是无效的,因为通常此表达式产生迭代器。
您应该使用指针。例如
std::memcpy(
(buffer.data()+128) , (RadarLL+128), (8192 - 128)*sizeof(uint8_t)
);
或
std::memcpy(
&buffer[128] , (RadarLL+128), (8192 - 128)*sizeof(uint8_t)
);