| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Неправильный размер массива |
| Автор: Alexey68 29.10.2013, 06:57 | ||||
| Здравствуйте All Возник следующий вопрос: при подключении внешней библиотеки (.h) в которой содержится массив типа:
и в дальнейшем записи в файл при размере файла в 200-300 кб, на выходе получаю размер 63,5 кб (65024). А файлы в 20-40 килобайт обрабатываются и создаются с правильным размером. записываю обычно в цикле:
В чём может быть причина? |
| Автор: Dem_max 29.10.2013, 07:05 |
| попробуй догадайся из пары строчек кода |
| Автор: Alexey68 29.10.2013, 07:28 | ||
Dem_max, если про цикл то всё как "обычно", даже не знаю... неправильно определяется размер массива?, тогда почему с меншьшим объёмом нет проблем... |
| Автор: vinter 29.10.2013, 07:52 | ||||||||
Alexey68, смотри, созаём файл(file.txt) и копируем в него содержимое:
Теперь открываем файл в hex редакторе, и копируем содержимое из него:
Теперь понятно почему?
У тебя всё с правильным размером, C++ не умеет размер неправильно считать. Смотреть на размер файла последнее дело. Может у тебя там с размером кластера чего или еще что-то. К чему вообще обращать внимание на размер файла? |
| Автор: Alexey68 29.10.2013, 08:08 | ||||
извиняюсь, но что-то не пойму, я изначально из hex редактора копирую в notepad++:
, далее путём замены получаю:
затем сохраняю в заголовочый файл и подключаю его. а далее пишу в цикле новый файл, наверное я изначально не так объяснил последовательность своих действий... |
| Автор: SVN74 29.10.2013, 09:27 |
| Есть " int " 16 разряд, а есть 32, а также нет уверенности в том, что "sizeof" делает правильный промер, многое зависит от компилятора. И вообще зачем применять цикл записи в файл, если можно просто записать весь массив в файл одной строчкой? "char mp_array[] " - лучше через "new" |
| Автор: vinter 29.10.2013, 09:35 | ||
| Т.е. у тебя изначальный hex файл 200 кб, не результирующий заголовок? Если так, то у тебя проблема скорее всего в
Как ты делаешь эту замену? |
| Автор: feodorv 29.10.2013, 12:07 | ||
Вот. Как файл открывается? Нет ли с ним дополнительных телодвижений? Намёк не понят... Ну, не "строчкой", а массивом. Почему не fwrite? .h - это всё-таки заголовочный файл, не библиотека. В нём прямо вот так и написано:
или как-то иначе? На вид один к одному, под "заменой", наверное, подразумевалось "приведение к C/C++ виду". |
| Автор: vinter 29.10.2013, 12:53 | ||
Если у него заголовок с массивом представлен в том виде, то размер заголовка(физически) будет больше чем сам массив в силу текстового представления данных в файлах исходных кодов C++. |
| Автор: Alexey68 29.10.2013, 18:17 | ||||||||
| Благодарю всех откликвнувшихся, и прошу прощения за задержку на вопросы: вот код:
что я делаю по порядку: 1. Открываю файл в flexhex 2. копирую из него 3. вставляю в notepad++ to Vinter >>Как ты делаешь эту замену? поиск и замена 4. получаю файл вида:
5. сохраняю как mp.h 6. пытаюсь побайтово записать в новый файл (сделать копию) операционка xp Но самое главное что даже без дальнейших манипуляций с массивом (а его размер в заголовочном файле правильный), если получить размер через sizeof, то результат 65024, если указываю
89960 итерации... подсвечивает:
проверил другой файл 460кб (те же операции), всё без проблем. как разберусь с файлом (вышеобозначенный в первом посте) напишу. |
| Автор: feodorv 30.10.2013, 02:11 | ||||||
Вот теперь что-то начинает прорисовывается. То есть Вы берёте файл, преобразовываете его содержимое в C-форму в виде массива байт, а затем этот массив сохраняете в другом файле? Где-то я уже видел эту цифру. Ах да:
Вам не приходило в голову, что C (со своей стандартной библиотекой) здесь не причём? Что размер массива реально 65024 байт для любого достаточно большого файла?
Как-то не верится, либо Вы изменили процедуру получения .h-файла, либо в процедуре есть ещё какие-то неведомые подводные камни))) PS Какой размер у .h-файла при возникновении ситуации с 65024 байтами? |
| Автор: Alexey68 3.11.2013, 02:12 |
| Всем огромное спасибо и прошу прощения за задержку. В этом ли причина или нет, но после project-clean main (в меню borland c++) всё работает... короче непонятно, но работает. Ещё раз всем огромное спасибо. С уважением Алексей. |