C++ GTKMM,在文本缓冲区中得到一个奇怪的输出

Posted

技术标签:

【中文标题】C++ GTKMM,在文本缓冲区中得到一个奇怪的输出【英文标题】:C++ GTKMM, getting a weird output in a text-buffer 【发布时间】:2021-02-05 23:29:35 【问题描述】:

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

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

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"));


如何修复错误的输出以及为什么会得到它?

【问题讨论】:

【参考方案1】:

这里的主要问题是分配output = line,然后是free(line)

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

在你完成字符串之前不要释放内存,或者复制line中的字符串(赋值这样做) .

【讨论】:

以上是关于C++ GTKMM,在文本缓冲区中得到一个奇怪的输出的主要内容,如果未能解决你的问题,请参考以下文章

C++ 奇怪的文件输出

在 Eclipse 中为 C++ 设置 GTKmm

gtkmm : 用 cairo 绘制文本

用 Gtkmm 创建一个网格向量

C++ 中带有 Gtkmm 的 ProgressBar

为啥字符串连接在 C++ 中得到奇怪的结果? [关闭]