将一个结构体成员复制到另一结构体

nob*_*bby 1 c arrays struct

我正在努力解决这种语法:我有一些数组结构:

struct Msg {
    uint8_t Data[DATA_SIZE];
};

struct Msg Msg_Buff[NUM_MESSAGES], Temp_Buff[NUM_MESSAGES];
Run Code Online (Sandbox Code Playgroud)

并想要将一个数组从一个结构复制到另一个结构。

这:

*Temp_Buff[Other_Indx].Data = *Msg_Buff[This_Indx].Data;
Run Code Online (Sandbox Code Playgroud)

仅复制数组的第一个元素,而不复制整个数组。我究竟做错了什么?

Eri*_*hil 6

很大程度上由于历史原因,C 数组无法赋值。

如果数组是结构中的唯一成员,则可以简单地分配结构而不是数组:Temp_Buff[Other_Indx] = Msg_Buff[This_Indx];

否则,复制整个数组:memcpy(Temp_Buff[Other_Indx].Data, Msg_Buff[This_Indx].Data, sizeof Temp_Buff[Other_Indx].Data);. 该memcpy例程在 中声明<string.h>

请注意, 的使用sizeof依赖于其操作数 ,Temp_Buff[Other_Indx].Data它是已知大小的实际数组。如果是指针,则需要以其他方式提供大小,例如NumberOfElements * sizeof *Temp_Buff[Other_Indx].Data.


P__*_*J__ 5

memcpy如果您只想复制一个成员,则需要使用它。

#define DATA_SIZE 100
#define NUM_MESSAGES 200

struct Msg {
    uint8_t Data[DATA_SIZE];
};

struct Msg Msg_Buff[NUM_MESSAGES], Temp_Buff[NUM_MESSAGES];


void copyDataAtIndex(size_t index)
{
    memcpy(Temp_Buff[index].Data, Msg_Buff[index].Data, sizeof(Temp_Buff[index].Data));
}
Run Code Online (Sandbox Code Playgroud)

如果你想复制整个结构 - 只需分配:

void copyStructAtIndex(size_t index)
{
    Temp_Buff[index] = Msg_Buff[index];
}
Run Code Online (Sandbox Code Playgroud)

  • 你需要一一`memcpy` (2认同)