gtk_label_set_text() 无法正常工作

gtk_label_set_text() not working properly

我正在使用 Glade 制作 GUI 并使用 GTK 编写其代码。我制作了一个 GUI,这样如果单击“开始”按钮,不同参数的值就会开始显示在 Gtk 标签中。我已经为所有参数创建了函数,并且正在调用“开始按钮”处理程序中的每个函数。我在其中一个参数中添加了这一行 gtk_label_set_text(GTK_LABEL(label),value) 。当我 运行 代码时,它给我错误:Segmentation Fault(Core dumped)。

所以我的第一个问题是为什么它会给我这个错误。? 我做了一些研究,发现了一些东西,所以我在我的值中添加了“&”,然后它没有给我分段错误,而是显示了其他东西。现在如何解决这个问题? 下面是代码:

x = receivebuffer[4];
y = receivebuffer[3];
z = receivebuffer[2];



F = (x<<16) | (y<<8) | z;
printf("Value of F is %d\n", F);
gtk_label_set_text(GTK_LABEL(Voltage_Entry_Label), &F);

receivebuffer 是我接收必须显示在标签上的数据的缓冲区。只有第 4、3 和 2 个元素有用,所以我将它们存储在另一个变量中,我做了一些简单的逻辑,最后我在 F 中获取数据。Printf() 给出类似 104 的输出,但 Gtk Label 给出类似 T 的输出。现在F要显示在Gtk Label中了。

结论:为什么我必须使用 & 来删除分段错误。为什么它在 Gtk 标签上给我其他东西。?

根据 gtk 文档,gtk_label_set_text 应用作:

void    gtk_label_set_text(GtkLabel *label, const gchar *str);

这里,第二个参数是一个指针。这就是当您将第二个参数作为 int 传递时出现分段错误的原因。
当您将第二个参数作为 &F 传递时,它会自动将 (int *) 转换为 (const gchar *) 并给出 ASCII 104.

表示的字符

所以正确的方法是使用临时字符数组。

char temp[5];
sprintf(temp, "%d", F);
gtk_label_set_text(GTK_LABEL(Voltage_Entry_Label), temp);