gpt4 book ai didi

c - 我的用于从文本文件中删除行的 c 程序适用于小文件,但在处理大文件时出现 stacksmash 错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:41:31 25 4
gpt4 key购买 nike

我正在开发一个程序来过滤 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;
}
}
}

最佳答案

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

关于c - 我的用于从文本文件中删除行的 c 程序适用于小文件,但在处理大文件时出现 stacksmash 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7536324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com