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

Бинарные файлы и структуры - C++

Восстановить пароль Регистрация
 
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
09.12.2012, 20:23     Бинарные файлы и структуры #1
Доброго времени суток. Прошу ответить на пару вопросов:
1) Почему результат операции sizeof, применённый к структуре, не совпадает с суммой кол - ва байт всех типов и элементов массивов?
Напр:
C++
1
2
3
4
5
6
struct mon 
    {
        char model[21];
        int  opt, roz;
        char comm [40];
    } buf;
sizeof(buf) = 72
2)Почему после выполнения приведённого ниже кода числа 8 при просмотре fout визуально не видно, однако, если записывать символы, то они отображаются нормально?
C++
1
2
3
4
if((fout = fopen("output.txt", "w+b")) == 0)
        return 1;
int a = 8;
fwrite(&a, sizeof(int), 1, fout);
3)Какие ещё есть тонкости при работе с бинарными(текстовыми) файлами, о которых не знают новички?
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2012, 20:23     Бинарные файлы и структуры
Посмотрите здесь:

Структуры,бинарные файлы,массивы C++
C++ Бинарные файлы
Бинарные файлы c++ C++
C++ Бинарные файлы
Бинарные запись и чтение структуры в файл C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
09.12.2012, 20:29     Бинарные файлы и структуры #2
Цитата Сообщение от PG94 Посмотреть сообщение
1) Почему результат операции sizeof, применённый к структуре, не совпадает с суммой кол - ва байт всех типов и элементов массивов?
Происходит выравнивание. Поэтому не стоит самому определять размер структуры, а доверять компилятору.

Добавлено через 1 минуту
Цитата Сообщение от PG94 Посмотреть сообщение
2)Почему после выполнения приведённого ниже кода числа 8 при просмотре fout визуально не видно, однако, если записывать символы, то они отображаются нормально?
Перефразируйте, пожалуйста, вопрос.

Добавлено через 1 минуту
Цитата Сообщение от PG94 Посмотреть сообщение
3)Какие ещё есть тонкости при работе с бинарными(текстовыми) файлами, о которых не знают новички?
Последний символ в текстовом файле лучше делать перевод строки.
Всегда проверять возвращаемое значение.
Цитата Сообщение от PG94 Посмотреть сообщение
fwrite(&a, sizeof(int), 1, fout);
Очень плохая запись.
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
09.12.2012, 21:34  [ТС]     Бинарные файлы и структуры #3
Цитата Сообщение от go Посмотреть сообщение
Перефразируйте, пожалуйста, вопрос.
Записываю число ф-ие fwrite в файл, после этого открываю файл блокнотом. В примере a присваивается 8, но в файле 8 не отображается.
Цитата Сообщение от go Посмотреть сообщение
Поэтому не стоит самому определять размер структуры, а доверять компилятору.
Как тогда посоветуете поступать, если необходимо записать в бинарный файл массив структур?
Цитата Сообщение от go Посмотреть сообщение
Очень плохая запись.
Почему?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
09.12.2012, 21:43     Бинарные файлы и структуры #4
Цитата Сообщение от PG94 Посмотреть сообщение
Записываю число ф-ие fwrite в файл, после этого открываю файл блокнотом. В примере a присваивается 8, но в файле 8 не отображается.
Бинарный файл нельзя открывать блокнотом.
Цитата Сообщение от PG94 Посмотреть сообщение
Как тогда посоветуете поступать, если необходимо записать в бинарный файл массив структур?
Оператор sizeof
Цитата Сообщение от PG94 Посмотреть сообщение
Почему?
Цитата Сообщение от go Посмотреть сообщение
Всегда проверять возвращаемое значение.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
09.12.2012, 21:50     Бинарные файлы и структуры #5
Цитата Сообщение от go Посмотреть сообщение
Сообщение от PG94
Записываю число ф-ие fwrite в файл, после этого открываю файл блокнотом. В примере a присваивается 8, но в файле 8 не отображается.
Бинарный файл нельзя открывать блокнотом.
ну вообще можно , если в блокноте встроен hex редактор
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
09.12.2012, 21:52     Бинарные файлы и структуры #6
Van111, а он там встроен?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
13.12.2012, 19:47     Бинарные файлы и структуры #7
вот доказательство
Миниатюры
Бинарные файлы и структуры  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2012, 21:51     Бинарные файлы и структуры
Еще ссылки по теме:

Бинарные файлы C++
C++ Бинарные файлы в С++
C++ Бинарные файлы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
13.12.2012, 21:51     Бинарные файлы и структуры #8
Van111, много разных редактор. Но мы говорим о стандартном блокноте.
Yandex
Объявления
13.12.2012, 21:51     Бинарные файлы и структуры
Ответ Создать тему
Опции темы

Текущее время: 23:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru