Вы можете использовать союз.
struct mystruct_s {
... /* who knows how long */
};
typedef union {
struct mystruct_s s;
unsigned char padding[512];
} mystruct;
Это обеспечит объединение 512 байт или более. Затем вы можете убедиться, что это не более 512 байт, используя статическое утверждение где-то в вашем коде:
/* Causes a compiler error if sizeof(mystruct) != 512 */
char array[sizeof(mystruct) != 512 ? -1 : 1];
Если вы используете C11, есть лучший способ сделать это. Я не знаю никого, кто использует C11 еще. Стандарт был опубликован несколько недель назад.
_Static_assert(sizeof(mystruct) == 512, "mystruct must be 512 bytes");
Обратите внимание, что единственный способ дополнить нулями - это поставить нули туда вручную (calloc
или memset
). Компилятор игнорирует заполненные байты.