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

后端 未结 2 1171
花落未央
花落未央 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条回答
  •  -上瘾入骨i
    2021-01-26 07:34

    The only way that comes to mind is to write the following data separately:

    1. Length of the string.
    2. The array of characters of the string.
    3. The age.

    and read them separately.

    Create functions to write/read an instance of Data such that they are aware of each other's implementation strategy.

    std::ostream& write(std::ostream& out, Data const& data)
    {
       size_t len = data.name.size();
       out.write(reinterpret_cast(&len), sizeof(len));
       out.write(data.name.c_str(), len);
       out.write(reinterpret_cast(&data.age));
       return out;
    }
    
    std::istream& read(std::istream& in, Data& data)
    {
       size_t len;
       in.read(reinterpret_cast(&len), sizeof(len));
    
       char* name = new char[len+1];
       in.read(name, len);
       name[len] = '\0';
       data.name = name;
       delete [] name;
    
       in.read(reinterpret_cast(&data.age));
       return in;
    }
    

    and use them similarly to your first approach.

    Instead of using

    people.write(reinterpret_cast(&person),sizeof(person));
    

    use

    write(people, person);
    

    Instead of using

    people.read(reinterpret_cast(&person),sizeof(person));
    

    use

    read(people, person);
    

提交回复
热议问题