0

アイテムを構造体の配列にコピーしています...次に、その要素を構造体の配列から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); 
4

1 に答える 1

2

ポインター演算は、ポインターの型のサイズによって数値をスケーリングします。m_cmMessageCB->cMessageは char* ポインターであり、sizeof(char)定義上は 1 であるため、構造体のサイズを掛けると正しい値が得られます。一方、m_cmMessageCB + *m_posWriteは既に で乗算*m_posWriteされsizeof(typeCanMessage)ているため、再度実行すると計算が完全に中断されます。20回に1回も機能していることに驚いています。

于 2013-08-21T21:09:07.843 に答える