繁体   English   中英

GTK - 无法使用函数 `printf` 打印缓冲区值

[英]GTK - Cannot print buffer value using function `printf`

我得到了textview的内容,我想使用 printf 函数在终端中显示内容。 但是有奇怪的符号(为什么?):

在此处输入图片说明

// get textbuffer from textview end print value in terminal
void on_lower_button_clicked(GtkWidget *lower_button, GtkTextView *textview_1)
{
    GtkTextBuffer *textbuffer_1;
    textbuffer_1 = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview_1));
    printf("%s\n", textbuffer_1); // strange symbols from my buffer ...
}

int main(int argc, char *argv[])
{
  GtkWidget *lower_button;
  GtkBuilder *builder;
  GtkWidget *window;
  GError *error = NULL;

  gtk_init(&argc, &argv);

  builder = gtk_builder_new();
  if(!gtk_builder_add_from_file(builder, "template.ui", &error)) {
    g_printerr("Error loading file: %s\n", error->message);
    g_clear_error(&error);
    return 1;
  }

  window = GTK_WIDGET(gtk_builder_get_object(builder, "window"));
  lower_button = GTK_WIDGET(gtk_builder_get_object(builder, "lower_button"));

  gtk_builder_connect_signals(builder, NULL);
  // when I click on the button (lower_button) call 
  // on_lower_button_clicked function and transferred to her textview_1
  g_object_unref(G_OBJECT(builder));

  gtk_widget_show(window);
  gtk_main();

  return 0;
}

GtkTextBuffer不是字符数组,它是一个 GTK 对象,不能简单地打印为文本。

如果要打印或将其写入文件,则需要从中提取文本。

为此,您需要获取几个GtkTextIter对象,然后使用gtk_text_buffer_get_text

请注意,如果您的文本中有非英文字符,则使用printf可能仍然存在问题,因为生成的文本是 UTF-8 编码的。

这是一个示例代码:

GtkTextIter start, end;
gchar *text;

gtk_text_buffer_get_start_iter(textview_1, &start);
gtk_text_buffer_get_end_iter(textview_1, &end);

text = gtk_text_buffer_get_text(textview_1, &start, &end, FALSE);

printf("%s\n",text);

g_free(text); //you need to clean up this buffer!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM