TidyHtml在C ++中无法正常工作

时间:2018-04-01 15:04:07

标签: c++ linux g++

我正在使用TidyHtml在Linux环境中清理我的应用程序中的html文件。我确实意识到libtidy是一个C库。我确实将它包含在extern" C" {}语法中,如我的代码中所示。这是我改编的TidyHtml网站在C ++示例中使用的示例,我在条件中添加了printf()函数。

有两个问题。第一个以tidyOptSetBool()开头但失败并且永远不会到达printf("%s\n", "1");行。第二个是

tidyBufFree( &output );
tidyBufFree( &errbuf );

行导致分段错误(核心转储)。

这是完整的代码示例:

#include <stdio.h>
#include <tidy.h>
#include <tidybuffio.h>
#include <stdio.h>
#include <errno.h>
using namespace std;

extern "C" {
    int tidyHtml(){
        const char* input = "<title>Foo</title><p>Foo!";
        TidyBuffer output = {0};
        TidyBuffer errbuf = {0};
        int rc = -1;
        Bool ok;

        TidyDoc tdoc = tidyCreate();                     // Initialize "document"
        printf( "Tidying:\t%s\n", input );

        ok = tidyOptSetBool( tdoc, TidyXhtmlOut, yes );  // Convert to XHTML
        if ( ok ){
            rc = tidySetErrorBuffer( tdoc, &errbuf );      // Capture diagnostics
            printf("%s\n", "1");
        }

        if ( rc >= 0 ){
        rc = tidyParseString( tdoc, input );           // Parse the input
            printf("%s\n", "2");
        }
        if ( rc >= 0 ){
        rc = tidyCleanAndRepair( tdoc );               // Tidy it up!
            printf("%s\n", "3");
        }
        if ( rc >= 0 ){
        rc = tidyRunDiagnostics( tdoc );               // Kvetch
            printf("%s\n", "4");
        }
        if ( rc > 1 ){                                    // If error, force output.
        rc = ( tidyOptSetBool(tdoc, TidyForceOutput, yes) ? rc : -1 );
            printf("%s\n", "5");
        }
        if ( rc >= 0 ){
        rc = tidySaveBuffer( tdoc, &output );          // Pretty Print
            printf("%s\n", "6");
        }

        if ( rc >= 0 )
        {
        if ( rc > 0 )
          printf( "\nDiagnostics:\n\n%s", errbuf.bp );
        printf( "\nAnd here is the result:\n\n%s", output.bp );
        }
        else
        printf( "A severe error (%d) occurred.\n", rc );

        tidyBufFree( &output );
        tidyBufFree( &errbuf );
        tidyRelease( tdoc );
        return rc;
    }
}


int main(int argc, char *argv[]){
    tidyHtml();
}

这是我的complie语句g++ -o main main2.cpp -ltidy,它报告了0个错误。

并在运行应用程序时输出:

Tidying:    <title>Foo</title><p>Foo!
A severe error (-1) occurred.
Segmentation fault (core dumped)

0 个答案:

没有答案