如何在使用glib时打印guint64值?

Goa*_*444 6 c glib

问题

我正在使用GLib 2.0库,并声明了一个gunit64变量.我希望将其值显示在屏幕上,但它无法正常工作.

以下面的代码片段为例.我声明了一个guint64变量,并尝试打印它的值.

guint64 myValue = 24324823479324;
printf("My Value: %d\n", myValue);
Run Code Online (Sandbox Code Playgroud)

警告

我收到这个警告:

warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘guint64’ 
Run Code Online (Sandbox Code Playgroud)

产量

我在屏幕上看到一个奇怪的负数:

我的价值:-1871285220

进一步评论

我试图搜索API的文档,我在guint64下找到了以下内容:

所有平台上的无符号整数保证为64位.此类型的值范围为0到G_MAXUINT64(= 18,446,744,073,709,551,615).

要打印或扫描此类型的值,请使用G_GINT64_MODIFIER和/或G_GUINT64_FORMAT.

因此,我假设我必须使用修饰符或格式定义.但是,文档未显示如何使用它们.有人能帮帮我吗?

unw*_*ind 10

你找到了合适的.以下是如何使用它:

printf("My value: %" G_GUINT64_FORMAT "\n", myValue);
Run Code Online (Sandbox Code Playgroud)

请注意,宏是带引号的字符串文字,因此上面是正确的语法.另请注意,%它不是宏的一部分.

您的号码显示为负数,因为您正在使用%dint,当您将其视为一个较小的,已签名的int编码时,您需要的号码和数字位数为负数.

  • @ Goaler444也许stdout因为缺少换行而没有被冲洗?尝试`printf("我的值:%"G_GUINT64_FORMAT"\n",myValue);`相反. (2认同)