数组中的Memcpy只能正常工作1/20个实例

Memcpy from an array is only working 1/20 instances correctly?

本文关键字:工作 实例 20个 常工作 Memcpy 数组      更新时间:2023-10-16

我正在将一个项目转换为一组结构。。。然后将该元素从结构数组复制到char数组。。。但只有1/20有效??

typedef struct{
    double dTime;
    char cMessage[11];
} typeCanMessage;

typeCanMessage *m_cmMessageCB = new typeCanMessage[1000]; //max size can be the CB

memcpy(m_cmMessageCB + *m_posWrite * sizeof(typeCanMessage), &m_cmMessageWrite, sizeof(typeCanMessage));

// WORKS
//memcpy(cStr, &m_cmMessageWrite.cMessage, 11);             
// FAILS: every 1/20 works
memcpy(cStr, m_cmMessageCB->cMessage + *m_posWrite * sizeof(typeCanMessage), 11); 

指针算术根据指针类型的大小缩放数字。m_cmMessageCB->cMessage是一个char*指针,sizeof(char)根据定义是一个,因此将其乘以结构的大小应该会得到正确的值。另一方面,m_cmMessageCB + *m_posWrite已经将*m_posWrite乘以sizeof(typeCanMessage),因此再次这样做将完全放弃计算。我很惊讶它每20次就工作一次。