我遇到了问题。我不知道为什么但编译器抛出错误:
错误:'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);}
我试图清理整个项目,但我仍然遇到了这个错误。我想我错过了一些基础知识,但我真的不知道我犯了什么错误。值得一提的是,我在其他功能中使用类似的代码并且它有效。有什么想法吗?
答案 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 +复制其所有字符串。)