Моя программа c для удаления строк из текстового файла работает с небольшим файлом, но имеет ошибку стека с большим файлом - PullRequest
0 голосов
/ 24 сентября 2011

Я работаю над программой для фильтрации списка результатов Craigslist;Я хочу найти относительно дешевую комнату в аренду.Готовая программа удалит строки, цена которых превышает 600 долларов, и создаст новый файл, но сейчас я удаляю каждую строку с символом $ и печатаю в терминал.

Программа работает нормально при запускеиз собственного источника, но когда я запускаю его на html-странице результатов craigslist, сохраненных из Firefox, он печатает до закрывающей html-скобки и выдает предупреждение об обнаружении разрушения стека и обратную трассировку.Я изучаю C из K & R, поэтому, если этот код выглядит устаревшим, вот почему.

# include <stdio.h>
# define MAXLINE 300

main()
{
    char line[MAXLINE];
    int c;//current character
    int p = 0;//position in the line
    int flag = 0;//there is a dollar sign

    while ((c = getchar()) != EOF){
        line[p++] = c;
        if (c == '$'){
            flag = 1;
        }
        if (c == '\n'){
            if(flag == 0){//there was no $, print the line
                int i;
                for(i=0;i<p;i++){
                    putchar(line[i]);
                    line[i] = '\0';
                }
            }
            p = 0;
            flag = 0;
        }
    }
}

1 Ответ

4 голосов
/ 24 сентября 2011

Я полагаю, что проблема в том, что HTML содержит хотя бы одну строку длиной более MAXLINE символов. Вы нигде не проверяете, превышаете ли вы размер массива; если вы это сделаете, вы действительно разбили бы стек. Ваш цикл while может проверить, было ли p меньше MAXLINE, напечатать сообщение, если нет, и остановить. Вы не могли бы ничего сделать без довольно значительных изменений в вашей программе.

...