简体   繁体   English

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

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

I get the contents of my textview and I want to display the contents in the terminal using the printf function.我得到了textview的内容,我想使用 printf 函数在终端中显示内容。 But have stange symbols (Why?):但是有奇怪的符号(为什么?):

在此处输入图片说明

// 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 is not a character array, it is a GTK object that can not be simply printed as text. GtkTextBuffer不是字符数组,它是一个 GTK 对象,不能简单地打印为文本。

You need to extract the text from it if you want to print it or write it to file.如果要打印或将其写入文件,则需要从中提取文本。

To do this, you will need to get a couple of GtkTextIter objects, and then use gtk_text_buffer_get_text .为此,您需要获取几个GtkTextIter对象,然后使用gtk_text_buffer_get_text

Note, that if you have non English characters in your text, you may still have issues using printf , because the resulting text is UTF-8 encoded.请注意,如果您的文本中有非英文字符,则使用printf可能仍然存在问题,因为生成的文本是 UTF-8 编码的。

Here is an example code:这是一个示例代码:

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