简体   繁体   中英

Using fread/fwrite for STL string. Is it correct?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM