0

我正在开发一个程序来过滤 craigslist 结果列表;我想找一个相对便宜的房间出租。完成的程序将删除价格超过 600 美元的行,并创建一个新文件,但现在我要删除带有 $ 字符的每一行,并打印到终端。

该程序在自己的源代码上运行时运行良好,但是当我在从 Firefox 保存的 craigslist 结果的 html 页面上运行它时,它会一直打印到结束 html 括号并抛出堆栈粉碎检测到的警告和回溯。我正在从 K&R 学习 C,所以如果这段代码看起来过时,那就是原因。

# 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;
        }
    }
}
4

1 回答 1

4

我想问题在于 HTML 至少包含一行长度超过 MAXLINE 个字符。您不会在任何地方检查您是否要超过数组的大小;如果你这样做,你确实会粉碎堆栈。您的while循环可以检查是否p小于MAXLINE,如果不是则打印一条消息,然后停止。如果不对程序进行相当大的更改,您将无法做任何其他事情。

于 2011-09-24T01:24:51.557 回答