Moh*_*HME 2 c c++ struct padding
假设我有以下结构:
typedef struct {
int mID;
struct in_addr mIP;
size_t dataSize;
// Another structure
fairness_structure str;
bool ack;
bool stability;
bool stop_message;
}HeaderType;
Run Code Online (Sandbox Code Playgroud)
如您所知,结构的大小会因其对齐而有所不同.如何用一些数据填充字段之间的填充,比如用零填充?
小智 5
只需使用memset初始化结构,填充也将被填充.
memset(&mystruct, 0, sizeof(HeaderType));
Run Code Online (Sandbox Code Playgroud)
如果你真的只想填充垫子,你可以将指针指向char*并进行算术运算.但在这种情况下,你必须知道编译器如何填充结构,或者自己强制执行#pragma pack.您可以使用offsetof()宏来获取struct成员的偏移量.
char *off = (char *)&mystruct + offsetof(HeaderType, ack);
char *pad_start = off + sizeof(mystruct.ack);
char *pad_end = (char *)&mystruct + offsetof(HeaderType, stability);
Run Code Online (Sandbox Code Playgroud)
睡前阅读:C结构包装的失落艺术