C 从HTML文件中提取纯文本
你好,我希望你能帮助我。我必须编写这段代码(用C)下载网站的页面源代码并将其保存到html文件中(我已经这样做了)。下一部分是使用保存的html文件从该站点提取文本 我脑海中有这样一个算法步骤: 假设我们有一个html文件,其中包含:C 从HTML文件中提取纯文本,c,parsing,C,Parsing,你好,我希望你能帮助我。我必须编写这段代码(用C)下载网站的页面源代码并将其保存到html文件中(我已经这样做了)。下一部分是使用保存的html文件从该站点提取文本 我脑海中有这样一个算法步骤: 假设我们有一个html文件,其中包含: 你好再见! 查找“”字符串,跳过“”字符串。(这可以通过strstr()实现) 将指针设置为“”的第一个“>”。(使用strchr() 检查字符串中的下一个字符是否为“”。重复检查(3)。 b、 )如果否,则获取字符串直到下一个“第一个错误,从代码中可以看出,您执
b、 )如果否,则获取字符串直到下一个“第一个错误,从代码中可以看出,您执行的是
sizeof(char*)
而不是char
char *newString = (char*)malloc((sizeof(char*))*(filesize));
应该是
char *newString = (char*)malloc((sizeof(char))*(filesize));
您不希望字符串中有指针,但是char
s
你malloc
以上,并且从不调用free(newString)
,这意味着你至少有一次泄漏,可能更多
这里也一样:
fread(newString, sizeof(char*), filesize, dummy);
应该是:
fread(newString, sizeof(char), filesize, dummy);
finalString = "\n"; //reassigns the pointer to another string, doesn't write into allocated memory.
使用<代码> StrcPy < /Cord>将字符串复制到分配内存中。
< p>您的代码中有一些错误,这比在托尼的狮子回答中更为严重。请考虑: char *tempString = (char*)malloc((sizeof(char*))*(filesize));
char *finalString = (char*)malloc((sizeof(char*))*(filesize));
finalString = "\0";
tempString = strtok(newString, "<");
char*tempString=(char*)malloc((sizeof(char*))*(filesize));
char*finalString=(char*)malloc((sizeof(char*))*(filesize));
finalString=“\0”;
tempString=strtok(newString,“如果要获取文件大小,请使用它来控制循环(读取文件并不能确保在读取的末尾有一个零字节):
for(切换=0,i=0;i
One's not simply parse HTML你想要提取的HTML元素到底是什么?你为什么不使用一个可以解析HTML/XML的库?@MichaelFoukarakis,尽可能多地使用这些库。先生,我不想使用这些库。我仍在学习C语言,我被指示先用经典的方法来做。“经典的方法”是使用标准库(也就是说,不要第二次实现控制盘)。另一种选择是浏览标准库,提取接口,然后作为学习的一部分自己实现主体。你应该始终戴一顶标有“system developer”或“application developer”的帽子你应该考虑改变问题的名字,注意你想在没有图书馆的情况下实现它。这是一个常见的问题,但是你想要一个不寻常的答案。谢谢你,先生!我会注意到的。稍后我在Ubuntu中编码时会尝试它。我现在在Windows中。技术上,两者都不。可能导致seg错误:char*大于char,因此分配了更多内存。此外,您不能读取超过eof的内容,因此fread也是合法的。不过,代码中还有其他错误。
char *tempString = (char*)malloc((sizeof(char*))*(filesize));
char *finalString = (char*)malloc((sizeof(char*))*(filesize));
finalString = "\0";
tempString = strtok(newString, "<");
for (toggle = 0, i = 0; i < filesize; ++i) {
if (filearray[ i ] == '<') toggle = 1;
else if (filearray[ i ] == '>' && toggle != 0) toggle = 0;
else if (!toggle) {
printf("\nText char '%c' at %d", filearray[ i ], i);
}
}