Запись объекта в файл без лишних символов

183
09 мая 2018, 04:22

Изучаю запись/чтение данных в файл и столкнулся с такой проблемой. Записываю объект в файл через методы read/write.

vector<PhoneBook> data;
while (inData.read((char*)&temp, sizeof(PhoneBook)))
    {
        data.push_back(temp);
    }
//...
for (int i = 0; i < data.size(); i++)
    {
        outData.write((char*)&data[i], sizeof(PhoneBook));
    }

Проблема в том, что в файл записываются вместе со значениями полей лишние символы ( и им подобные). Поясните пожалуйста, почему так происходит и как это исправить. Можно ли проводить чтение/запись с помощью методов read/write, но чтобы в файл записывались только значения полей? Заранее благодарен за помощь.

Answer 1

Так можно поступать только со "старыми простыми данными" (POD) в стиле С. Странно, что у вас нет полного краха программы по обращению к некорректному адресу в памяти или чего еще. Чтобы подсказать, как правильно - надо знать, что у вас там внутри, в PhoneBook.

Как писать В общем случае - см. этот ответ, например.

Ну, а если вас интересует, откуда лишнее в файле - так ведь если, например, у вас массив под C-строку из 100 байт, а строка из 5, то пишутся-то все 100 байт, а не 5 - sizeof(), как у вас написано. Вот и пишется 5 байт нужных и 95 - того, что просто в памяти лежит.

READ ALSO
Ошибки во встроенных библиотеках xutility и vector (Visual Studio 2012) [требует правки]

Ошибки во встроенных библиотеках xutility и vector (Visual Studio 2012) [требует правки]

Компилировал на Visual Studio 2012В самом коде ошибок нет, но если нужен код, то: https://drive

205
В чем проблема?,помогите ее решить, пожалуйста [требует правки]

В чем проблема?,помогите ее решить, пожалуйста [требует правки]

Вроде все правильно,но программа не работает перед запуском

218
Поведенческий полиморфизм подтипов

Поведенческий полиморфизм подтипов

Цитата из википедии: Наследование, — даже в языках программирования, которые поддерживают применение наследования как механизма, обеспечивающего...

225