来自g_print的奇怪输出

时间:2015-10-12 20:40:13

标签: c linux gtk

编译代码时出现以下错误: 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)测试

现在这似乎可以被恶意使用

关于我在这里面临的问题和我应该做的事情的任何提示?

感谢

3 个答案:

答案 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 *