当有人点击它时,我正在使用焦点回调来“删除”GtkEntry的内容(如果他们将其留空,则将其放回,类似于堆叠上的问题标题)
但是,当函数像局部变量一样结束时,变量将被清空。
我在这里做错了什么?
// A place to store the character
char * store;
// When focussed, save the contents and empty the entry
void
use_key_entry_focus_in_event(GtkWidget *widget, GdkEvent *event, gpointer user_data){
if(strcmp(gtk_entry_get_text(GTK_ENTRY(widget)), "")){
store = (char *) gtk_entry_get_text(GTK_ENTRY(widget));
}
gtk_entry_set_text(GTK_ENTRY(widget), "");
}
void
othercallback(){
printf("%s",store); // Returns nothing
}
在answerers的帮助下编辑我写了这个(不需要malloc):
char store[2];
[...]
strcpy(store, (const char *) gtk_entry_get_text(GTK_ENTRY(widget)));
答案 0 :(得分:1)
我对GTK库一无所知,但你的问题几乎可以肯定是你没有复制字符串,你只是复制它的地址。然后你用gtk_entry_set_text()
替换字符串,这样原来的字符串就会消失。
您需要执行以下操作:
const char *tmp = (char *) gtk_entry_get_text(GTK_ENTRY(widget));
store = malloc(strlen(tmp)+1);
strcpy(store, tmp);
在某些时候要小心free(store)
。