首页 > 解决方案 > C++ GTKMM,在文本缓冲区中得到一个奇怪的输出

问题描述

我是 Gtkmm 的新手,并试图将 txt 文件加载到文本缓冲区中。当我启动我的程序时,我得到这样的输出:输出

我填充文本缓冲区的代码如下所示:

void ExampleGui::fill_buffers()
{
    FILE *fp = fopen("/home/User/Documents/Gui/test1.txt", "r");
    if (fp == NULL)
        exit(EXIT_FAILURE);

    char *line = NULL;
    size_t len = 0;
    char *output = NULL;
    while ((getline(&line, &len, fp)) != -1) {
        output = line;
    }
    fclose(fp);
    if (line)
        free(line);

    m_refTextBuffer1 = Gtk::TextBuffer::create();
    m_refTextBuffer1->set_text("Welcome!\nClick the button Show Text to start.");

    m_refTextBuffer2 = Gtk::TextBuffer::create();
    m_refTextBuffer2->set_text(Glib::convert_with_fallback(output, "UTF-8", "ISO-8859-1"));

}

我怎样才能修复那个错误的输出,为什么我会得到它?

标签: c++gtkgtkmm

解决方案


这里的主要问题output = linefree(line).

因为output指向相同的内存line意味着output变得无效。

在完成字符串之前不要释放内存,或者复制字符串line(分配不这样做)。


推荐阅读