Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
alextram

Глючит fwrite (пишет 5 байт вместо 4)

26.03.2011, 11:49. Показов 2977. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Среда: C++ Builder 2010.

В некий файл пишутся всякие бинарные данные (типы char/int/long) при помощи fwrite. Казалось бы, задача проще некуда. Много раз выполяется команда:

fwrite(&x, 4, 1, f);

x — типа unsigned long, в ней в момент глюка содержится значение 0xC000000A. Казалось бы, в файле должны оказаться байты: 0x0A 0x00 0x00 0xC0. Но в реальности перед ними откуда-то берётся пятый байт, 0x0D (т. е. 13 — мистика, блин!)

До и после этого fwrite стоят fflush(f), так что проблема чётко в данной строке. При этом все остальные данные (в том числе тот же самый 0xC000000A) и до и после глючащей позиции с помощью той же самой команды записываются нормально.

Единственное, на что тут могу грешить — где-то раньше до этого была произведена запись в недопустимую область памяти. Но всё равно проявление этого весьма странное. Может, дело в чём-то другом? Бьюсь третий день.

Добавлено через 14 часов 31 минуту

Переделал вывод под ofstream — работает как часы. Крайне странная история.

Вообще, какой способ работы с файлами предпочтительнее в Windows? Ибо выбор большой.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.03.2011, 11:49
Ответы с готовыми решениями:

Считываю с потока файл пакетами -> сохраняю файл. что использовать на Qt вместо fwrite?
пока программа не компилируется, успела только прописать вот такой код QString...

Fstream пишет 13 вместо 10
столкнулся с весьма необычной проблемой. открываю файл для записи if (!Open(filename, 1))return false; bool FILE::Open(str filename,...

Asus S301L вместо з пишет *
Всем привет. у меня ноут Asus S301L Сегодня вдруг стал писать вместо буквы з или английской p звездочку * Так же пишет / вместо 0 ...

4
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.03.2011, 12:39
Цитата Сообщение от alextram Посмотреть сообщение
Но в реальности перед ними откуда-то берётся пятый байт, 0x0D (т. е. 13 — мистика, блин!)
А ты уверен, что ты в этот файл больше нигде ничего не записывал? Потому что мистики на свете не бывает, а мистика в программировании в 999999 случаях из 1000000 является причиной ошибочно написанного исходника. Ради интереса сделай два одинаковых вызова fwrite подряд. Если окажется, что после этого размер файла равен 10 байтам, то то реально мистика, если 9, то значит где-то в программе есть ещё одно место, которое этот несчастный перевод строки вклеивает
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
26.03.2011, 16:50
Замена кода 0x0A на два кода - 0x0D 0x0A происходит в текстовом режиме работы с файлом
Поэтому косяк где-то есть, но у тебя

А вообще приводи минимальную рабочую программу, которая демонстрирует глюк
3
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.03.2011, 17:00
Цитата Сообщение от odip Посмотреть сообщение
Замена кода 0x0A на два кода - 0x0D 0x0A происходит в текстовом режиме работы с файлом
Вот чёрт Совсем забыл про такую особенность винды. На коротком примере оно действительно проявляется

C
1
2
3
FILE *fp = fopen ("a.txt", "w");
int x = 0x0a000000;
fwrite(&x, 4, 1, fp);
alextram, если при открытии файла вместо режима "w" использовать "wb", то такого эффекта не будет
2
51 / 37 / 14
Регистрация: 05.08.2016
Сообщений: 187
20.05.2019, 23:09
odip, Спасибо тебе добрый человек!!!! Я уже почти поверил. 10 раз все перепроверил. Прошелся пошагово все четко передает откуда 0x0d. Пишу простенькую реализация сжатия RLE для BMP и последующего вывода микроконтроллером на LCD дисплей. Просто добавлялись биты и вся картинка уезжала.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.05.2019, 23:09
Помогаю со студенческими работами здесь

Глючит мышь (произвольный двойной клик вместо одинарного)
День добрый! Помогите разрешить возникшую на днях проблему: USB-Мышь начала делать двойной, а то и тройной клик при одном клике левой...

Записывает 256 байт вместо 240!
Function DeleteRecord(id: Integer): Boolean; . . . Type TCows = Record id: integer; name: String; weight:...

В адресной строке вместо localhost пишет [::1]
Добрый день. У меня в адресной строке сайта на локале, вместо localhost пишет Что это не пойму, в файлах проекта искал, нет ничего...

Cout пишет адрес вместо значения
cout пишет адрес вместо значения. Спасибо

Вместо открытия браузера программа пишет букву
Итак, я хочу, чтобы когда пользователь писал программе "открой браузер" она нам задавала вопрос "какой?: ", это сделал,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru