如何在C/C++中填写struct padding?

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结构包装的失落艺术