C 使用glib时如何打印guint64值?
问题 我正在使用GLib 2.0库,并声明了一个gunit64变量。我想把它的值打印到屏幕上,但它不能正常工作 代码 以下面的代码段为例。我声明了一个guint64变量,并尝试打印它的值C 使用glib时如何打印guint64值?,c,glib,C,Glib,问题 我正在使用GLib 2.0库,并声明了一个gunit64变量。我想把它的值打印到屏幕上,但它不能正常工作 代码 以下面的代码段为例。我声明了一个guint64变量,并尝试打印它的值 guint64 myValue = 24324823479324; printf("My Value: %d\n", myValue); 警告 我得到这个警告: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has ty
guint64 myValue = 24324823479324;
printf("My Value: %d\n", myValue);
警告
我得到这个警告:
warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘guint64’
输出
我在屏幕上看到一个奇怪的负数:
我的价值:-1871285220
进一步评论
我试图搜索API的文档,在guint64下发现了以下内容:
在所有平台上保证为64位的无符号整数。价值观
此类型的范围从0到G_maxiunt64(=
18446744073709551615)
要打印或扫描此类型的值,请使用G_GINT64_修饰符和/或
G_GUINT64_格式
因此,我假设必须使用修饰符或格式定义。但是,文档没有说明如何使用它们。有人能帮我吗?你已经找到合适的方法了。以下是如何使用它:
printf("My value: %" G_GUINT64_FORMAT "\n", myValue);
请注意,宏是一个带引号的字符串文字,因此以上是正确的语法。还要注意,%
不是宏的一部分
您的数字显示为负数,因为您使用的是
%d
,它需要int
,当您的数字位被视为较小的有符号int
,则编码为负数。@Goaler444可能是因为缺少换行符,所以stdout没有被刷新?尝试printf(“我的值:%”G\u GUINT64\u格式“\n”,我的值)代码>取而代之。@Goaler444确切地了解代码的外观将是一件有趣的事情,可能有一些愚蠢的事情(如Ancurio所说的缺少换行符)。这确实应该有效,而且是正确的方法。@Ancurio,我认为这是一个冲洗问题。我添加了“\n”,它就可以工作了。@谢谢你,现在就可以了。对不起,我没有给你正确的答案。一开始对我不起作用。我的错。