gpt4 book ai didi

c - Gtk gchar 标签

转载 作者:太空宇宙 更新时间:2023-11-04 06:35:58 26 4
gpt4 key购买 nike

当我尝试运行以下代码片段时,我不断收到此错误和奇怪的乱码:

错误是:

(foo:11333):Pango-WARNING **:传递给 pango_layout_set_text() 的 UTF-8 字符串无效

结构定义:

typedef struct chat_info ChatInfo;
struct chat_info {
GtkWidget *text_line1;
GtkWidget *text_line2;
GtkWidget *text_line3;
GtkWidget *entry;

};

这段代码让奇怪的乱码出现在第三个标签上(第二个标签是空的)

static void send_message(GtkWidget *window, gpointer data){
GuiInfo *g = (GuiInfo *) data;


ChatInfo *c = g->chat;

const gchar *message = gtk_entry_get_text(GTK_ENTRY(c->entry));
const gchar *oldtext1 = gtk_label_get_text( (GtkLabel *) c->text_line1);
const gchar *oldtext2 = gtk_label_get_text( (GtkLabel *) c->text_line2);

gtk_label_set_text( (GtkLabel *) c->text_line1, message);
gtk_label_set_text( (GtkLabel *) c->text_line2, oldtext1);
gtk_label_set_text( (GtkLabel *) c->text_line3, oldtext2);


}

我查找了错误,我猜这可能是由于在我应该给出 gchar 字符串时给出指针地址之类的原因?不过一切看起来都不错。

最佳答案

我认为问题在于,在您通过调用 再次使用它之前,_get_text() 调用返回的内存正在被 GtkLabel 释放_set_text().

例如,当您调用 gtk_label_set_text(c->text_line1, message) 时,您检索到 oldtext1 的指针无效(调用 gtk_label_get_text() 返回指向字符串内部副本的指针。

现在您可以通过重新排序代码以移除该依赖项来解决此问题:

gtk_label_set_text( (GtkLabel *) c->text_line3, oldtext2);
gtk_label_set_text( (GtkLabel *) c->text_line2, oldtext1);
gtk_label_set_text( (GtkLabel *) c->text_line1, message);

或者为了便于阅读,您应该strdup()_get_text() 获取的字符串,然后将它们传递给_set_text() 并稍后释放它们。

关于c - Gtk gchar 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15018154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com