我有以下问题。 当我这样传递一个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