2015-10-19 60 views
1

我想更新對g_callback中的指針變量所做的修改,但我不知道如何,請你幫助我嗎? (我是一個完全新手用GTK +和C語言...)在g_callback之後的主循環中更新變量GTK + C

void modify_string(char *str) 
{ 
    char *new_str = "Something new"; 
    str = new_str; 
} 

int main(int argv, char **argc) 
{ 
    char *str = NULL; 
    gtk_init(&argc, &argv); 
    GtkWidget *screen = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    init_main_window(screen); 
    GtkWidget *button = gtk_button_new_with_label("Open"); 

    /* ... */ 

    g_signal_connect(G_OBJECT(screen), "destroy", G_CALLBACK(gtk_main_quit), NULL); 
    g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(modify_string), str); 
    printf("%s\n", str); 
    gtk_main(); 

    return EXIT_SUCCESS; 
} 

的問題是,它打印「(空)」而不是「新的東西」,你有什麼想法更新我的字符串請?

編輯:我不明白,謝謝!

+0

''printf()'在你的GUI運行之前被調用,所以你會看到'str'的​​初始值。您需要重新修改程序邏輯(可能還有閒置的回調)。 – andlabs

+0

我要補充說,使用GString會更「安全」。 GString可以通過向緩衝區添加更多字符串來處理您需要的空間。是的,你可以從GString中獲取字符串(gchar)。 – Joel

回答

-1

您沒有爲new_str分配任何空間。並且你正在給str分配一個局部變量,當例程結束並且範圍丟失時這會丟失。試着寫一個解決這兩個問題的例程。