2015-03-10 7 views
0

Я делаю GUI, используя Glade и записывая его код с помощью GTK. Я создаю графический интерфейс, чтобы при нажатии кнопки «Пуск» значения параметров показывались в Gtk Label. Я выполнил функции для всех параметров, и я вызываю каждую функцию в обработчике Start Button. Я добавил эту строку gtk_label_set_text (GTK_LABEL (метка), значение) в одном из параметров. Когда я запускаю код, он дает мне ошибку: Ошибка сегментации (Core сбрасывается).gtk_label_set_text() не работает должным образом

Так что мой первый вопрос, почему он дает мне эту ошибку.? Я провел некоторое исследование, и я нашел что-то, поэтому добавил «&» с моим значением, а затем он не дал мне ошибку сегментации, но отобразил что-то еще. Теперь, как это исправить. Ниже приведен код:

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 Label.?

ответ

3

От GTK документации, gtk_label_set_text следует использовать в качестве:

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

Здесь второй аргумент является указателем. Вот почему вы получаете ошибку сегментации, когда вы передаете второй аргумент как int.
Когда вы проходите второй аргумент & F, то он автоматически конвертировать (Int *) к (сопзИте gchar *) и дать символ, представленный ASCII 104.

Таким образом, правильный способ заключается в использовании массива временного обугленный.

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

Спасибо, человек работает правильно –

Смежные вопросы