File IO does not work well with POD types either. The size of "integer" "long" and "pointer" types, for example, vary across 8, 16, 32 and 64-bit platforms. The endianness of integral types varies across CPU families. And floating point types may be represented differently across platforms. All non-string types need to be explicitly serialized and de-serialized. And even strings are tricky -- you have to agree what character encoding is being used.
@andrezc: The garbage at the end of the file is because the full size of the _name member, all 20 bytes, are being written to the file, not just the 5 characters from the name "Andre". What you are seeing are the nul terminator and the uninitialized remnants of the _data array.