alextram
|
|
1 | |
Глючит fwrite (пишет 5 байт вместо 4)26.03.2011, 11:49. Показов 2406. Ответов 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? Ибо выбор большой.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь |
|
26.03.2011, 11:49 | |
Ответы с готовыми решениями:
4
Считываю с потока файл пакетами -> сохраняю файл. что использовать на Qt вместо fwrite?
Asus S301L вместо з пишет *
|
![]() ![]() |
|
26.03.2011, 12:39 | 2 |
А ты уверен, что ты в этот файл больше нигде ничего не записывал? Потому что мистики на свете не бывает, а мистика в программировании в 999999 случаях из 1000000 является причиной ошибочно написанного исходника. Ради интереса сделай два одинаковых вызова fwrite подряд. Если окажется, что после этого размер файла равен 10 байтам, то то реально мистика, если 9, то значит где-то в программе есть ещё одно место, которое этот несчастный перевод строки вклеивает
0
|
![]() 7175 / 3234 / 80
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
26.03.2011, 16:50 | 3 |
Замена кода 0x0A на два кода - 0x0D 0x0A происходит в текстовом режиме работы с файлом
Поэтому косяк где-то есть, но у тебя ![]() А вообще приводи минимальную рабочую программу, которая демонстрирует глюк
3
|
![]() ![]() |
||||||
26.03.2011, 17:00 | 4 | |||||
Вот чёрт
![]()
2
|
51 / 37 / 14
Регистрация: 05.08.2016
Сообщений: 187
|
|
20.05.2019, 23:09 | 5 |
odip, Спасибо тебе добрый человек!!!! Я уже почти поверил. 10 раз все перепроверил. Прошелся пошагово все четко передает откуда 0x0d. Пишу простенькую реализация сжатия RLE для BMP и последующего вывода микроконтроллером на LCD дисплей. Просто добавлялись биты и вся картинка уезжала.
0
|
20.05.2019, 23:09 | |
Помогаю со студенческими работами здесь
5
Записывает 256 байт вместо 240! В адресной строке вместо localhost пишет [::1]
Вместо открытия браузера программа пишет букву Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |