- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从使用 gtk+ 的应用程序中收到以下警告:
(foo:11333): Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()
发出警告的函数如下:
static void show_error(GtkWindow *parent, const gchar *fmt, ...)
{
GtkWidget *dialog;
va_list args;
va_start(args,fmt);
dialog = gtk_message_dialog_new(parent,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
fmt,
args);
(void)gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
va_end(args);
}
我正在调用 ui_show_error(window, "error cannot read file %s", filename);
其中 filename
是以 null 结尾的字符串,它适用于 str*()
和 *printf()
函数系列。
如何解决这个问题?
最佳答案
不可能以这种方式链接 va_list 参数。参见 this faq entry .发生的事情是 gtk_message_dialog_new
将 va_list 参数(具有一些编译器定义的格式)解释为指向字符串的指针,因此您得到了垃圾。由于没有采用 va_list 的消息对话框函数,您唯一的选择是使用 vsprintf 或类似的 glib 函数之一构建一个字符串,并将其作为一个参数传递给 gtk_message_dialog_new
,格式如 "%s ”。
要在未知格式字符串的情况下构建字符串,通常的技术是使用“n”变体之一,例如具有较大缓冲区的 vsnprintf
,如果发生截断,则增加缓冲区大小并重做。但是,glib 有 g_vasprintf()
,它会为您分配缓冲区。它还具有 g_printf_string_upper_bound()
,可用于根据格式字符串调整缓冲区大小。
关于c - 如何修复传递给 pango_layout_set_text() 的无效 UTF-8 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13115816/
我从使用 gtk+ 的应用程序中收到以下警告: (foo:11333): Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_s
我在我的 gtk 应用程序中收到上述警告。我知道这个问题已经被讨论过了,但我的问题是我什至没有使用这个功能。 我所做的就是从文件中读取文本字符串,然后使用 pango 更改其字体类型和字体大小,然后将
我是一名优秀的程序员,十分优秀!