![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
xXvladXx |
|
|||
Бездарь ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 9.3.2008 Репутация: нет Всего: 1 |
Привет.
Скажу честно я новечек в с++. щас пытаюсь написать функцию которая открывает файл делает сдвиг +1 и сохраняет когда в файле 123 то все ок когда в файле бинарный файл он коцаеться и обрезаеться=( код
хуть я и новечек но вижу тут переполнение буфера, хотя файл на входе 11кб я и выделяю 1мб Вопросы у меня такие 1)как сделать что бы можно было работать с большими файлами(когда размер массива пишу 3+мб прога вылетает=() 2)Почему файл с 11 кб обрезаеться до 2 кб 3)я понимаю что код ужасен, но все же как его улучшить?=) Это сообщение отредактировал(а) xXvladXx - 9.5.2009, 01:03 |
|||
|
||||
fry |
|
||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Такой размер так просто не выделишь, надо либо изменять размер стека, либо выделять память динамически. ИМХО выбором в 99,9999% всех случаев является именно второй вариант. Для его реализации:
после того как попользуешь выполни освобождение
Надо быть осторожным при выделении очень большого количества памяти, да и вообще всегда, т.к. данный код может привести в исключению std::bad_alloc.
Если собирался вывести массив в консоль, то это таким способом не делается. У тебя будет выводиться указатель на массив(на первый элемент).
Тут вроде надо
или
, а то если 1 байт в файле цикл не выполнится Это сообщение отредактировал(а) fry - 9.5.2009, 03:35 |
||||||||||||||
|
|||||||||||||||
xXvladXx |
|
|||
Бездарь ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 9.3.2008 Репутация: нет Всего: 1 |
Спасибо,
Динамический массив потянет 100мб?=) Ну или хотя бы 10=) Насчет фора, без -1 у меня в конец буква "я" добавляеться из неокуда=) Почему у меня на выходе файл гораздо меньше? А открытие и запись в файл, для бинарных данных подходит? |
|||
|
||||
fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Правильно ты заметил насчет замечания, я что-то ступил. Просто привык в циклах while все писать и глаза не заметили j++. Хотя правильность кода не определяется тем добавляется "я" в конец или нет, надо анализировать и делать рисунки если не понимаешь.
Насчет 100 метров памяти. Выделить так можно сколько тебе понадобится(в пределах размера свободной памяти). Файл - просто набор данных, следовательно пиши, читай. Что есть бинарный файл? Для меня например это файл с исполняемым кодом. Насчет обрезания файла до 2 кг. ХЗ так вроде на первый взгляд все верно в коде, но раз обрезает остается только гуглить. |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Обрезание происходит из-за того что файлы открыты как текстовые (без "rb" или ios::binary). Символ с кодом 0x1A воспринимается как конец файла.
Использовать одновременно stdio и iostream - плохой стиль. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |