我需要这样做,以便两个结构的内容将在两个结构大小的单个缓冲区内。我需要使用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结构在标题结束的地方继续?
答案 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提到的观点 因为你可能不需要指针数组。