g_print 的奇怪输出
strange output from g_print
编译代码时出现以下错误:
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 测试”
我得到:
(空)测试
现在这似乎是可以被恶意使用的东西
关于我在这里面临的问题以及我应该做什么的任何提示?
谢谢
使用格式说明符:
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));
使用:
g_print ("%s", gtk_entry_get_text ((GtkEntry *)((struct data *) callback_params)->entry))
消除警告。它确保如果 gtk_entry_get_text
returns 具有转换规范的字符串(例如 %x
或 %n
)它们将不会被 g_print
.[=15= 解释]
似乎已发布的代码试图打印从对 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()
函数 returns a const gchar *
编译代码时出现以下错误: 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 测试” 我得到: (空)测试
现在这似乎是可以被恶意使用的东西
关于我在这里面临的问题以及我应该做什么的任何提示?
谢谢
使用格式说明符:
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));
使用:
g_print ("%s", gtk_entry_get_text ((GtkEntry *)((struct data *) callback_params)->entry))
消除警告。它确保如果 gtk_entry_get_text
returns 具有转换规范的字符串(例如 %x
或 %n
)它们将不会被 g_print
.[=15= 解释]
似乎已发布的代码试图打印从对 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()
函数 returns a const gchar *