未初始化的变量

时间:2015-12-27 13:27:28

标签: c initialization gtk

我遇到了问题。我不知道为什么但编译器抛出错误:

  

错误:'tmp'在此函数中未初始化使用[-Werror = uninitialized] |

在那个 sprintf()所在的代码中:

void OknoMin(){

char *tmp;
window_miny = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window_miny), "LICZBA MIN");
gtk_window_set_position(GTK_WINDOW(window_miny), GTK_WIN_POS_NONE);
gtk_window_set_default_size(GTK_WINDOW(window_odkryte), 150,30);

miny=gtk_entry_new();
sprintf(tmp,"%d",k);
gtk_entry_set_text((GtkEntry*)miny,tmp);
gtk_container_add(GTK_CONTAINER(window_miny), miny);

g_signal_connect(G_OBJECT(window_miny), "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect_after( miny, "insert-text", G_CALLBACK(check_after), NULL );
gtk_widget_show_all(window_miny);}

我试图清理整个项目,但我仍然遇到了这个错误。我想我错过了一些基础知识,但我真的不知道我犯了什么错误。值得一提的是,我在其他功能中使用类似的代码并且它有效。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

tmp肯定是未初始化的,所以编译器告诉你。初始化变量。

而不是这样,我认为在这种情况下使用数组会更好(只有从一个整数转换的字符串才会存储在缓冲区中)。

void OknoMin(){

    char tmp[64]; /* *tmp -> tmp[64] */
    window_miny = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window_miny), "LICZBA MIN");
    gtk_window_set_position(GTK_WINDOW(window_miny), GTK_WIN_POS_NONE);
    gtk_window_set_default_size(GTK_WINDOW(window_odkryte), 150,30);

    miny=gtk_entry_new();
    sprintf(tmp,"%d",k);
    gtk_entry_set_text((GtkEntry*)miny,tmp);
    gtk_container_add(GTK_CONTAINER(window_miny), miny);

    g_signal_connect(G_OBJECT(window_miny), "destroy", G_CALLBACK(gtk_main_quit), NULL);
    g_signal_connect_after( miny, "insert-text", G_CALLBACK(check_after), NULL );
    gtk_widget_show_all(window_miny);
}

答案 1 :(得分:2)

由于你正在使用GTK +,你也使用了GLib,这为你提供了一个更好的方法:g_strdup_printf()。这为您分配了适量的内存。 g_free()免费。 (您可以在调用其中一个gtk_xxx_set_yyy()方法后立即释放; GTK +复制其所有字符串。)