使用 GTK+2 时收到“格式不是字符串文字且没有格式参数”警告

Getting a “format not a string literal and no format arguments” warning while using GTK+2

我收到这样的错误:

warning: format not a string literal and no format arguments [-Wformat-security]
                                              GTK_BUTTONS_OK,
(const gchar*)message);
                   ^

因为这个函数:

static void show_message (gchar *message, GtkMessageType type) {
  GtkWidget *dialog = gtk_message_dialog_new(NULL, 0, type,
                                             GTK_BUTTONS_OK,
                                             message);
  gtk_dialog_run(GTK_DIALOG(dialog));
  gtk_widget_destroy(dialog);
}

我该如何解决?

答案很简单。

您必须将 "%s" 添加到 gtk_message_dialog_new() 函数的参数中,如下所示:

static void show_message (gchar *message, GtkMessageType type) {
  GtkWidget *dialog = gtk_message_dialog_new(NULL, 0, type,
                                             GTK_BUTTONS_OK, "%s",
                                             message);
  gtk_dialog_run(GTK_DIALOG(dialog));
  gtk_widget_destroy(dialog);
}

基本上,缺少 "%s"gcc 认为是不安全的。

您可以在此处阅读更多相关信息: