未初始化的变量
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+ 复制它的所有字符串。)
我有问题。我不知道为什么,但编译器抛出错误:
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+ 复制它的所有字符串。)