未初始化的变量

Uninitialized variable

我有问题。我不知道为什么,但编译器抛出错误:

error: 'tmp' is used uninitialized in this function [-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);}

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

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);
}

因为您使用的是 GTK+,所以您也在使用 GLib,这为您提供了一个更好的方法:g_strdup_printf(). This allocates the right amount of memory for you. Free with g_free()。 (您可以在调用 gtk_xxx_set_yyy() 方法之一后立即释放;GTK+ 复制它的所有字符串。)