编译代码时出现以下错误: file.h:在函数'add_new_set'中: file.h:7:53:警告:格式不是字符串文字而没有格式参数[-Wformat-security] g_print(gtk_entry_get_text((GtkEntry *)((struct data *)callback_params) - > entry));
这是我的代码:
struct data
{
GtkWidget * entry;
};
void add_new_set(GtkDialog *dialog, gint response_id, gpointer callback_params)
{
g_print (gtk_entry_get_text ((GtkEntry *)((struct data *) callback_params)->entry));
}
static struct data callback_params;
callback_params.entry = gtk_entry_new();
gtk_container_add(GTK_CONTAINER(content_area), callback_params.entry);
g_signal_connect(dialog,"response",G_CALLBACK (add_new_set),&callback_params);
现在当我按下按钮运行g_print部分时,如果我输入'%s test' 我明白了: (null)测试
现在这似乎可以被恶意使用
关于我在这里面临的问题和我应该做的事情的任何提示?
感谢
答案 0 :(得分:2)
使用格式说明符:
g_print (gtk_entry_get_text ((GtkEntry *)((struct data *) callback_params)->entry));
应该是:
g_print ("%s\n", gtk_entry_get_text ((GtkEntry *)((struct data *) callback_params)->entry));
答案 1 :(得分:2)
使用:
g_print ("%s", gtk_entry_get_text ((GtkEntry *)((struct data *) callback_params)->entry))
摆脱警告。它确保如果gtk_entry_get_text
返回包含转化规范的字符串(例如%x
或%n
),则g_print
不会解释这些字符串。
答案 2 :(得分:1)
似乎发布的代码试图从调用gtk_entry_get_text()
打印返回的文本(实际上是一个指针返回)。
要使用g_print()函数(也使用printf()函数)打印文本字符串,g_printf()的第一个参数必须是包含一个或多个格式说明符的字符串文字。建议尝试:
g_print ("%s\n", gtk_entry_get_text ((GtkEntry *)((struct data *) callback_params)->entry));
gtk_entry_get_text()
函数返回const gchar *