Я посмотрел на двоичные чтения и записи объектов в C++, но у вас есть некоторые проблемы. Он «работает», но, кроме того, я получаю огромное количество ошибок/«info».Ошибка двоичного чтения/записи во время выполнения
Что я сделал это
Person p2;
std::fstream file;
file.open(filename.c_str(), std::ios::in | std::ios::out | std::ios::binary);
file.seekg(0, std::ios::beg);
file.read ((char*)&p2, sizeof(p2));
file.close();
std::cout << "Name: " << p2.name;
Человек простой структура, содержащая string name
и int age
. Когда я запускаю программу, он выводит «Имя: Боб», так как я уже сделал программу для записи в файл (так что объект уже находится в имени файла).
В дополнение к выводя имя он также выводит:
* Glibc обнаруженную * программы: двойной бесплатно ог коррупции (fastttop): ***
трассировку:
...
Карта памяти:
...
Abort
Не перепечатывайте код, он может ввести ошибки. __Cut и Paste__. Двоичное чтение/запись объекта будет работать, только если структура не содержит указателей. Это правило должно быть рекурсивно применено ко всем членам.Поэтому, если член или член-член участника или члены-члены является указателем, это сломается. С дополнительной информацией о Человеке сложно сказать, действительно ли это будет работать. –
Покажите нам декларацию Личности. – 2010-03-04 13:56:25
Помните, что компилятору разрешено вставлять дополнения между полями в структурах, классах и объединениях. Другая проблема заключается в том, что для строк обычно требуется пространство, выделенное для них, чтение в это пространство, а затем назначение структуры *, если текстовое поле не является фиксированным размером *. –