我有以下問題。 當我這樣傳遞一個gpointer
的形式定義爲char id_rest[25];
一個char
參數在g_signal_connect
功能:char *在gpointer中發送一個奇怪的編碼字符串
g_signal_connect (G_OBJECT (button_pas_save), "clicked", G_CALLBACK (save), (gpointer) id_rest);
當我在回調函數,在這種情況下是save
我得到什麼看起來像一個printf它字符串以不同的編碼方式。例如,當我通過AAA
時,我得到�
。
我試過用char*
指針和malloc
它沒有改變。但什麼是平板,而不是傳遞一個變量時,我只傳遞一個字符串在""
之間工作正常。例如:
g_signal_connect (G_OBJECT (button_pas_save), "clicked", G_CALLBACK (save), (gpointer) "AAA");
給我發送AAA
。
這是我在save
回調的printf:
printf("%s\n", (char*) id);
而且id
是gpointer
說法。 我也試過用gchar
而不是char
,它也沒有改變任何東西。
我出來的想法。請幫忙。
編輯:
灌裝變量被稱爲get_id
不同的函數來完成,在這裏你可以看到我測試這個行動,printf
,結果是好的,它發送的東西后回調真的奇怪。
get_id(con, selection, "pass", id_rest);
printf("%s\n", id_rest);
將'id_rest'設爲全局變量會發生什麼? – jxh
那麼它似乎工作正常,爲什麼? – Marek
這意味着@J_D可能是對的。堆棧變量已超出範圍,因此您的回調會打印無效內存。 – jxh