我使用Glade制作GUI并使用GTK编写代码。我制作一个GUI,以便在单击“开始”按钮时,不同参数的值开始显示在Gtk标签中。我已经为所有参数创建了函数,我在Start Button处理程序中调用了每个函数。我在其中一个参数中添加了这行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显示。
总结:为什么我必须使用&amp;删除分段错误。为什么它会在Gtk Label上给我一些别的东西。?
答案 0 :(得分:3)
从gtk文档中,gtk_label_set_text应该用作:
void gtk_label_set_text(GtkLabel *label, const gchar *str);
这里,第二个参数是指针。当你将第二个参数作为int传递时,这就是你得到分段错误的原因 当您将第二个参数作为&amp; F传递时,它会自动将(int *)转换为(const gchar *)并给出由ASCII 104表示的字符。
所以正确的方法是使用临时字符数组。
char temp[5];
sprintf(temp, "%d", F);
gtk_label_set_text(GTK_LABEL(Voltage_Entry_Label), temp);