【发布时间】:2015-09-28 18:03:08
【问题描述】:
我在 c 中有一个函数声明如下:
void SendMsg(TXMsg_t *TXMsg);
这是结构:
typedef struct
{
uint16_t DestAddr;
uint16_t PayloadLength;
uint8_t Payload[512];
} TXMsg_t;
我可以手动填充TXMsg.Payload,调用SendMsg(&TXMsg);,效果很好。但在一种情况下,我有一个调用 SendMsg 的中间函数:
void main(void)
{
uint16_t Addr = 0x1234;
uint16_t TXLength = 0x0004;
uint8_t TXData[4] = {0xAA, 0xBB, 0xCC, 0xDD};
MiddleFunction(Addr, TXLength, TXData);
}
void MiddleFunction(uint16_t Addr, uint16_t TXLength, uint8_t *TXData);
{
TXMsg_t TXMsg;
TXMsg.DestAddr = Addr;
TXMsg.PayloadLength = TXLength;
TXMsg.Payload = TXData; // This is the problem!!!
SendMsg(&TXMsg);
}
这给了我一个错误:“赋值给具有数组类型的表达式”。
我的目标是简单地将 指针 指向 TXData 并将其传递给我的 SendMsg 函数。这是一个嵌入式应用程序,我不想花时间或内存来实际复制数据...
我该怎么做?
【问题讨论】:
-
memcpy(TXMsg.Payload, TXData, TXLength);而不是TXMsg.Payload = TXData; -
谢谢@BLUEPIXY,我编辑了这个问题,说我试图避免实际复制数据:)
-
如果不更改
TXMsg_t类型的定义,就无法避免复制数据。 C 不允许数组作为赋值的左操作数。即使是这样,语义也需要是复制数据。不要混淆:虽然数组和指针在 C 中密切相关,但它们根本不是一回事。 -
@bitsmack 将
uint8_t Payload[512];更改为uint8_t *Payload;