| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Считывание структуры из файла |
| Автор: console 1.3.2007, 16:46 |
| Записываю структуру с разнородными полями в файл... записывается нормально... Когда считываю и вывожу на экран, выводятся еще лишние символы-кракозяблики... что делать? |
| Автор: Fazil6 1.3.2007, 16:48 | ||
понятия не имею. Предлагаешь угадать? |
| Автор: Sartorius 1.3.2007, 16:48 |
| показать исходник |
| Автор: console 1.3.2007, 16:53 | ||
structsize - переменная int типа, содержащая размер структуры fileptr - указатель на файл filesize() - функция для вычисления размера файла a - указатель на динамич память для структуры show_current() - собственно функция для вывода данных из структуры |
| Автор: Sartorius 1.3.2007, 16:57 |
| эээ.... ну я так не играю... |
| Автор: console 1.3.2007, 16:59 |
| В остальном все ок... Менюшка... выбираем - "Вывести все данные на экран" и запускается функция showall() {с содержанием, моего предыдущего поста} |
| Автор: Fazil6 1.3.2007, 17:01 | ||
тут будет каракули выводить |
| Автор: console 1.3.2007, 17:03 |
| Каракули выводит при выводе собственно инфы из файла Добавлено @ 17:03 я в DOS-кодировке пишу... так что все ок с рус |
| Автор: Fazil6 1.3.2007, 17:07 | ||||
я повторяю : ты хочешь чтобы угадали? Покажи что ты выводишь, как выводишь. Русский текст будет каракулями выводится. Как инфа в файле хранится, может надо не в текстовом режиме открывать? Как structsize вычисляется? Кроме данных в файле ведь еще всякие переносы строк могут быть... Добавлено @ 17:12
буфер как выделяется и коль уж это char* и так как в show_current(a); длина прочитанная не передается, то надобы нуль в конце ставить самому |
| Автор: console 1.3.2007, 17:14 | ||||||||||
Структура:
Вычисления размера структуры:
Функция записи структуры в файл:
Функция вычисления размера файла:
Добавлено @ 17:15 Буфер:
|
| Автор: Sartorius 1.3.2007, 17:21 | ||
почему а, когда там везде p? ЗЫ это наверно какой-то секретный проект. Нам все-таки не хотят показать исходник целиком. ЗЗЫ почему malloc? На ANSI С пишете? |
| Автор: console 1.3.2007, 17:25 | ||
| Sartorius, очень секретный )))) Да... Глобальный указатель...
Добавлено @ 17:27 Кстати... fread() возвращает не единицу... проблема Добавлено @ 17:36 Отчего тогда в остальных полях ничего не вылазит, а лишь в поле char phone[7] ? |
| Автор: console 1.3.2007, 18:12 | ||
| Насчет возврата fread() разобрался: Пример с http://www.cplusplus.com/
|
| Автор: console 1.3.2007, 18:35 |
| Не решен вопрос с последним полем.... вместе с полезной инфой выводится фигня Добавлено @ 18:45 Размер последнего поля увеличил на единицу, теперь все ок... Возникла другая проблема... При считывании (если в файле больше одной структуры) выводится всегда первая.... Тут наверное дело с указателем в файле..... fread() разве не перемещает его? |
| Автор: Pilligrim 1.3.2007, 20:50 | ||
console, легче: записывай структуру в файл почленно и считывай соответственно так же. Во-первых, уменьшишь размер файла(избежишь так называемого выравнивания в структуре), а во-вторых просто легче будет: избежишь лишних проблем)))
Перемещает |
| Автор: Dimonius 1.3.2007, 21:27 |
| Просвещаемся http://www.kalinin.ru/programming/cpp/31_07_00.shtml |
| Автор: console 1.3.2007, 23:01 |
| Все ок... считывается.... Вся загвоздка состояла в том, что файл одновременно 2 раза открывался... Всем огромное спасибо за советы, поправки и терпение... |