I have a structure, that contain string. Something like that:
struct Chunk { int a; string b; int c; };
So, i suppose, that i cannot write and read this structure from file using fread and fwrite functions. Because string may reserve different memory capacity. But such code works correctly.
Chunk var;
fwrite(&var, sizeof(Chunk), 1, file);
fread(&var, sizeof(Chunk), 1, file);
Is there really some problems in it?
You are justified in doubting this. You should only stream POD types with fwrite
and fread
and string
is not POD
.
You shouldn't do it like this, because different implementations use different structures of std::string
.
In general you should only serialize integral types, the boolean type, binary data (if you can call it serializing). Make sure to use one endian-ness if you are thinking of sharing serialized data between platforms.
Watch out with floats, doubles and pointers. They can become very pesky.
You'll have to watch out with C/C++ structs too ebcause they can contain unpredictable amounts of padding.
You should serialize data.
You might like to do this manually - when it comes about std::string
, check out:
When it comes about more complex objects, you might be interested in things like Google Protocol Buffers and/or Thrift .
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.