Llego tarde, pero quería alertar que no es correcto usar el sizeof de una struct para lectura o escritura en archivos, porque el tamaño (el size) de una struct depende del "data alignment" del compilador (o de cómo se haya seteado por línea de comando), y de la posición relativa de los miembros dentro de la struct. Pongo un ejemplo:
   
Código C++:
Ver original#include <iostream>
 
struct ejemplo1 {
    char a;
    int b;
    double c;
};
 
struct ejemplo2 {
    double c;
    char a;
    int b;
};
 
struct ejemplo3 {
    int b;
    double c;
    char a;
};
 
int main()
{
    std::cout << "sizof(char) + sizof(int) + sizeof(double) = "
              << sizeof(char) + sizeof(int) + sizeof(double) << '\n';
    std::cout << "sizeof(ejemplo1) = " << sizeof(ejemplo1) << '\n';
    std::cout << "sizeof(ejemplo2) = " << sizeof(ejemplo2) << '\n';
    std::cout << "sizeof(ejemplo3) = " << sizeof(ejemplo3) << '\n';
}