How to read/write string type member of a struct using binary file in/out in c++?

后端 未结 2 1170
花落未央
花落未央 2021-01-26 06:42

I have 2 c++ code: one is for write data into a binary file, another is for read that file.

write.cpp code is as below:

#include 

        
2条回答
  •  遥遥无期
    2021-01-26 07:35

    One problem is that sizeof(person.Name) does not give what you think it does. It always gives the same size (28 bytes in my case) not matter what characters you assign to your person.Name string. This is because of std::string contains at least:

    • a pointer to the actual string
    • other data structure to hold the available size and the size used

    Therefore, you cannot call people.write(reinterpret_cast(&person),sizeof(person));. The content of your string is not located at &person (its located wherever the pointer in std::string is pointing to)

    So, what happens when you do cout << person.name << endl; after reading it from your file? You've actually read the address (not the content) where person.name's string pointer was pointing to, when you wrote person to people.db. This is of course not a valid memory location, after reading it from your file, again.

提交回复
热议问题