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,在文本缓冲区中得到一个奇怪的输出的主要内容,如果未能解决你的问题,请参考以下文章