| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > Помогите побороть fgets |
| Автор: mrTeapot 12.4.2006, 17:36 |
| Доброе время, господа аксакалы. Проблема вот в чем. Пытаюсь написать в VC++ 6.0 незатейливую утилиту, обрабатывающую архив журнала "Компьютерра" за 1995-04 гг. в формате HTML. Невинный вроде бы код const StrBufSize = 5; char* StrBuff[StrBufSize]; const MaxStrLength=4*1024; ... // Корректное (смею думать) выделение памяти под StrBuff - 4096 байт для каждого из 5 элементов ... Index=fopen(cPath, "rt"); ... for(int k=0; k<StrBufSize;k++) { if(fgets(StrBuff[k], MaxStrLength, Index) ==NULL) { CloseHandlers(4); return; } else { ... - так вот, оный код исправно срабатывает несколько десятков раз и выдает устойчивую ошибку на одном конкретном HTML-файле. При k=3 fgets считывает очередную строку не полностью, разрывая ее в одном конкретном месте. Выделенных 4 килобайт он явно не "выбирает" (смеха ради увеличивал MaxStrLength до 44 к - результат тот же). При следующей итерации (k=4) - Debug assertion failed; file fgets.c ; line 59. После else в StrBuff ничего не пишется - только поиск вхождений с помощью strstr и strchr. До конца обрабатываемого файла весьма далеко. Архив лежит на винте, а не на CD. Просмотр HTML кода злокачественного файла с индикацией непечатных символов ничего не дал. Помогите же моему горю, господа аксакалы, и да продлит Аллах дни всякого ответившего. |
| Автор: Dov 12.4.2006, 20:53 | ||
Для начала так попробуй.
|
| Автор: mrTeapot 13.4.2006, 10:01 |
| Надо же... Все заработало. Спасибо, брат сионист. Что, однако ж, это было? И есть ли способ это обороть, кроме статического определения? |
| Автор: Dov 14.4.2006, 04:25 |
| mrTeapot, ты объявил массив строк(или массив указателей на тип char), но память под строки не выделил. Можно динамически тоже, вопрос только в том, а зачем это нужно. mrTeapot, что делает твоя прога или что она должна делать, конкретно. И зачем нужен массив, может быть без него можно обойтись? |
| Автор: mrTeapot 14.4.2006, 22:41 | ||||
Не думаю, что дело в этом. Не могу привести старый код с динамическим выделением, т. к. переписал его со статическим, но поверь на слово - я не настолько teapot и с new знаком. Опять же - я указывал, что
- нешто такое бывает без выделения? Впрочем, если была ошибка при вылелении памяти, теперь об этом не узнать. Прога моя группирует статьи заданного автора в HTML -файлы по годам, формирует ПСС, так сказать. Теперь-то это неважно - софтинка вроде работает исправно. Я понимаю, что в данном конкретном случае без динамического массива можно обойтись, хотелось бы только понять на будущее, в чем было дело. Ну да теперь чего уж... |