Форум программистов, компьютерный форум CyberForum.ru

Сохранение и чтение объекта класса в файл/из файла - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Численные методы http://www.cyberforum.ru/cpp-beginners/thread572608.html
Здравствуйте уважаемые форумчане! Если вас не затруднит, не могли бы вы помочь мне с двумя задачами, просто я сам так и не смог разобраться, как надо делать... :cry: Здраствуйте форумчане! Если кому не сложно, не могли бы вы немного помочь с вышеуказанными заданиями, не пойму, как их делать... 1. Вычислить площадь фигуры ограниченной функциями {f}_{1}\left(x \right)=tg\frac{x}{2} и...
C++ команда удаления строки введенной с клавиатуры на C++ Вот написал программу. Надо удалить строку с данными после ее ввода. Объявил функцию void DelOldDate(), но как написать ее тело для удаления данных с типом возвращаемого значения string itsDateRolic. Заранее спасибо. #include <iostream> #include <cstdlib> #include <string> http://www.cyberforum.ru/cpp-beginners/thread572590.html
Деление больших чисел C++
Доброго времени суток. Спасите пожалуйста, как здесь быть:) Даны два числа. Ваша задача найти частное и остаток от деления. Input В первой строке дано делимое, во второй - делитель. Каждое число может содержать от 1 до 5 000 000 цифр. Все цифры в обоих числах одинаковые. Output Запишите частное в первой строке, а остаток - во второй. Input
C++ Кординаты мыши и нажатие клавишы
у меня 2 вопроса: 1)Как определить координату мышки только по Y и записать её в переменную 2)Как отловить нажатую клавишу, если у меня программа в консоле и я её сворачиваю, и нажимаю mouse3 на рабочем столе. Добавлено через 7 минут UP UP UP Добавлено через 45 минут
C++ Ошибка http://www.cyberforum.ru/cpp-beginners/thread572569.html
Здравствуйте, вот сделал задание, а мне VS2010 выдаёт такую ошибку: First-chance exception at 0x75d1e37d in Tree.exe: 0x40010005: Control-C. Что это?:(
C++ Разобрать пример указателя на символьный массив void main() { const N=256; char S="zzzzz"; char *s={""}; s=&S; *s="xxxxxxxx"; cout<<*s<<endl; подробнее

Показать сообщение отдельно
StudentDan
20 / 20 / 1
Регистрация: 13.05.2012
Сообщений: 27
13.05.2012, 06:36     Сохранение и чтение объекта класса в файл/из файла
Доброе утро!

Программа и пишет в файл неправильно и читает. Тип данных wstring содержит по умолчанию 8 символов. sizeof возвращает размер именно такой стандартной строки - 32. Правильно работает эта функция только для массивов. Однако для строки длиной больше 7 символов потребуется больше памяти.
Также sizeof(Person) и sizeof(Base::base[i]) всегда совпадают и равны 132. Если считать сумму sizeof полей Base::base[i] мы тоже получим 132. Поэтому вывод в файл одной записи, даже отдельно по полям, всегда содержит 132 байта, что меньше реального размера, если name/surname/full_name больше 7 символов. Считывается же из файла также блок из 132 символов. И получается, что, к примеру, в заголовке full_name прописано capacity=15, а считывается меньше. Получаем неправильный указатель и компилятор ругается на это.

Можно сначала выводить длину строки, а затем саму строку посимвольно (я не знаю истинного размера строки). Рабочим вариантом записи поля name в файл будет
C++
1
2
3
4
5
 int Len = Base::base[i].name.size();
 file.write((char*) &Len, sizeof(Len));
 
 for (int j = 0; j < Len; j++)
  file.write((char*) &Base::base[i].name[j], 2);
А считывание тогда имеет вид
C++
1
2
3
4
5
6
7
8
9
10
11
 int Len;
 file.read((char*) &Len, sizeof(Len));
 
 wstring Str=L"";
 wchar_t ch;
 
 for (int I = 0; I < Len; I++)
 {
  file.read((char*) &ch, 2);
  Str = Str + ch;
 }
И так для каждого поля Person, или написать функции ввода/вывода.

Ещё у тебя в конце лишний раз считывается последняя буква как отдельное слово.

При неправильном вводе данных в форме добавления в справочник, кнопка OK больше не загорается.
 
Текущее время: 04:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru