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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
#1

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

09.12.2012, 20:23. Просмотров 467. Ответов 7
Метки нет (Все метки)

Доброго времени суток. Прошу ответить на пару вопросов:
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)Какие ещё есть тонкости при работе с бинарными(текстовыми) файлами, о которых не знают новички?
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2012, 20:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Бинарные файлы и структуры (C++):

Структуры,бинарные файлы,массивы - C++
Помогите пожалуйста решить такой вопрос: Подготовить программу,формирующую на основе информации вводимой с клавиатуры,два внешних...

Бинарные запись и чтение структуры в файл - C++
Записываю структуру в файл.. нужно прочитать.. но он не читает... если delete n; убрать, то "Нарушение прав доступа при записи". delete n...

Бинарные файлы - C++
1.Записать в файл N действительных чисел a1, a2, …,an. Организовать новый файл , элементы которого вычисляются по формуле:...

Бинарные файлы - C++
Помогите пожалуйста написать программы. Исходный файл формировать программно. Количество элементов исходного файла неизвестно. В...

Бинарные файлы - C++
Заполнить бинарный файл случайными числами. Найтим min значение (их может быть несколько) и заменить min значение нулями

Бинарные файлы - C++
Ребята у вас есть какие та примеры программок работы с бинарными файлами, к примеры поменять местами максимальные и минимальные значения...

7
go
Эксперт С++
3586 / 1366 / 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);
Очень плохая запись.
1
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
09.12.2012, 21:34  [ТС] #3
Цитата Сообщение от go Посмотреть сообщение
Перефразируйте, пожалуйста, вопрос.
Записываю число ф-ие fwrite в файл, после этого открываю файл блокнотом. В примере a присваивается 8, но в файле 8 не отображается.
Цитата Сообщение от go Посмотреть сообщение
Поэтому не стоит самому определять размер структуры, а доверять компилятору.
Как тогда посоветуете поступать, если необходимо записать в бинарный файл массив структур?
Цитата Сообщение от go Посмотреть сообщение
Очень плохая запись.
Почему?
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
09.12.2012, 21:43 #4
Цитата Сообщение от PG94 Посмотреть сообщение
Записываю число ф-ие fwrite в файл, после этого открываю файл блокнотом. В примере a присваивается 8, но в файле 8 не отображается.
Бинарный файл нельзя открывать блокнотом.
Цитата Сообщение от PG94 Посмотреть сообщение
Как тогда посоветуете поступать, если необходимо записать в бинарный файл массив структур?
Оператор sizeof
Цитата Сообщение от PG94 Посмотреть сообщение
Почему?
Цитата Сообщение от go Посмотреть сообщение
Всегда проверять возвращаемое значение.
1
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
09.12.2012, 21:50 #5
Цитата Сообщение от go Посмотреть сообщение
Сообщение от PG94
Записываю число ф-ие fwrite в файл, после этого открываю файл блокнотом. В примере a присваивается 8, но в файле 8 не отображается.
Бинарный файл нельзя открывать блокнотом.
ну вообще можно , если в блокноте встроен hex редактор
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
09.12.2012, 21:52 #6
Van111, а он там встроен?
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
13.12.2012, 19:47 #7
вот доказательство
0
Миниатюры
Бинарные файлы и структуры  
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
13.12.2012, 21:51 #8
Van111, много разных редактор. Но мы говорим о стандартном блокноте.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2012, 21:51
Привет! Вот еще темы с ответами:

Бинарные файлы c++ - C++
Здравствуйте. Нужно в бинарный файл записать строку (нового стиля), единственное что известно, так это то, что в строке не более 16...

Бинарные файлы - C++
Всем добрый день/вечер/ночь! У меня такой вопрос. Создал структуру и записал в файл. При записи в пошаговом режиме - все нормально....

Бинарные файлы - C++
Есть 2 текстовых файла .В первом информации представлена в след виде:номер и ФИО,во втором номер Группы,и оценки по предметам.Так мне нужно...

Бинарные файлы в С++ - C++
У меня есть програмка которая находит наименьший общий делитель числа#include<iostream> using namespace std; int main() { int n; ...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
13.12.2012, 21:51
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru