C - 将两个结构附加到单个缓冲区

时间:2014-09-10 06:43:28

标签: c pointers struct buffer memcpy

我需要这样做,以便两个结构的内容将在两个结构大小的单个缓冲区内。我需要使用memcpy这样做。

这是我目前的代码:

struct Header header;
struct Data_Format DF;

char *buffer[28];

header.Start = 0x7E;
header.Options = 0x00;

DF.Address = 0x007CB;
DF.Result = 0x105BA;

memcpy(buffer,&header,sizeof(header));

我该怎么做才能让DF结构在标题结束的地方继续?

3 个答案:

答案 0 :(得分:2)

试试这个:

char buffer[sizeof(header)+sizeof(DF)];
...
memcpy(buffer,&header,sizeof(header));
memcpy(buffer+sizeof(header),&DF,sizeof(DF));

答案 1 :(得分:1)

避免指针算术的替代答案:

typedef struct data {
    struct Header header;
    struct Data_Format DF;
} data_t;

data_t buffer;

...

memcpy (&buffer.header, header, sizeof(Header));
memcpy (&buffer.DF, DF, sizeof(Data_Format));

当然,您可以使用外部结构的struct组件,完全避免使用memcpy

您可能希望将__attribute__(packed)添加到struct,以确保填充不占用空间。

答案 2 :(得分:0)

只需添加另一个memcpy

memcpy(buffer + sizeof(header),&DF,sizeof(DF));

并且还要注意@Joachim Pileborg提到的观点 因为你可能不需要指针数组。

相关问题