C 从HTML文件中提取纯文本

C 从HTML文件中提取纯文本,c,parsing,C,Parsing,你好,我希望你能帮助我。我必须编写这段代码(用C)下载网站的页面源代码并将其保存到html文件中(我已经这样做了)。下一部分是使用保存的html文件从该站点提取文本 我脑海中有这样一个算法步骤: 假设我们有一个html文件,其中包含: 你好再见! 查找“”字符串,跳过“”字符串。(这可以通过strstr()实现) 将指针设置为“”的第一个“>”。(使用strchr() 检查字符串中的下一个字符是否为“”。重复检查(3)。 b、 )如果否,则获取字符串直到下一个“第一个错误,从代码中可以看出,您执

你好,我希望你能帮助我。我必须编写这段代码(用C)下载网站的页面源代码并将其保存到html文件中(我已经这样做了)。下一部分是使用保存的html文件从该站点提取文本

我脑海中有这样一个算法步骤:

假设我们有一个html文件,其中包含:

你好再见!<结束>

  • 查找“”字符串,跳过“”字符串。(这可以通过strstr()实现)
  • 将指针设置为“”的第一个“>”。(使用strchr()
  • 检查字符串中的下一个字符是否为“”。重复检查(3)。
    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);
          }
    }