It could be alignment or it could be that unsigned long is actually 64 bits.
The output from this would determine either or both cases:
Code:
#include <stdio.h>
#include <stddef.h>
struct struct_header {
unsigned long offset;
char magicCookie[4];
unsigned long unknown;
} typedef struct_header;
int main()
{
printf("sizeof %u %u \n", sizeof(struct_header), sizeof(unsigned long));
printf("offset %u %u\n", offsetof(struct_header,magicCookie), offsetof(struct_header,unknown));
return 0;
}