Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите побороть fgets, Ой, помогите... 
V
    Опции темы
mrTeapot
Дата 12.4.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 6.4.2006

Репутация: нет
Всего: нет



Доброе время, господа аксакалы.
Проблема вот в чем. Пытаюсь написать в 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 кода злокачественного файла с индикацией непечатных символов ничего не дал. Помогите же моему горю, господа аксакалы, и да продлит Аллах дни всякого ответившего.





PM MAIL   Вверх
Dov
Дата 12.4.2006, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Для начала так попробуй.
Код
const StrBufSize = 5;
const MaxStrLength = 256;
char StrBuff[StrBufSize][MaxStrLength];




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
mrTeapot
Дата 13.4.2006, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 6.4.2006

Репутация: нет
Всего: нет



Надо же... Все заработало. Спасибо, брат сионист. Что, однако ж, это было? И есть ли способ это обороть, кроме статического определения?

PM MAIL   Вверх
Dov
Дата 14.4.2006, 04:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(mrTeapot @ 13.4.2006, 09:01 Найти цитируемый пост)
Что, однако ж, это было?


mrTeapot, ты объявил массив строк(или массив указателей на тип char), но память под строки не выделил.
Цитата(mrTeapot @ 13.4.2006, 09:01 Найти цитируемый пост)
И есть ли способ это обороть, кроме статического определения?


Можно динамически тоже, вопрос только в том, а зачем это нужно. mrTeapot, что делает твоя прога или что она должна делать, конкретно. И зачем нужен массив, может быть без него можно обойтись?


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
mrTeapot
Дата 14.4.2006, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 6.4.2006

Репутация: нет
Всего: нет



Цитата

mrTeapot, ты объявил массив строк(или массив указателей на тип char), но память под строки не выделил.


Не думаю, что дело в этом. Не могу привести старый код с динамическим выделением, т. к. переписал
его со статическим, но поверь на слово - я не настолько teapot и с new знаком. Опять же - я указывал, что
Цитата

код исправно срабатывает несколько десятков раз


- нешто такое бывает без выделения? Впрочем, если была ошибка при вылелении памяти, теперь об этом не узнать.
Прога моя группирует статьи заданного автора в HTML -файлы по годам, формирует ПСС, так сказать. Теперь-то это неважно - софтинка вроде работает исправно. Я понимаю, что в данном конкретном случае без динамического массива можно обойтись, хотелось бы только понять на будущее, в чем было дело. Ну да теперь чего уж...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.