size_t
被定义为 unsigned
整数,但它的大小取决于您使用的是 32 位还是 64 位机器。打印 size_t
的正确且便携的方法是什么?
尝试使用
%zu
格式字符串
size_t val = get_the_value();
printf("%zu",val);
z 部分是一个长度说明符,表示参数的长度为 size_t。
来源 - http://en.wikipedia.org/wiki/Printf#printf_format_placeholders
这里有一个 C++ 标签,所以
cout <<
是另一个可能的答案。
这在 C 的所有版本中都很难得到正确的结果。在 C90 中,转换为
unsigned long
应该可以工作,但这可能在 C99 中不起作用,并且 C99 解决方案不一定在 C90 中工作。 1995 年的变更中引入了可靠区分 C90 和 C99 的能力(指定 __STDC__
的允许值)。我认为没有一种完全可移植的方法适用于 C90、C99 和 C++,尽管对于其中任何一个都有解决方案。
我认为C++的答案是:
std::size_t n = 1;
std::cout << n;
对于 C 风格的 IO 来说有点复杂。在 C99 中,他们为
z
值添加了 size_t
长度修饰符。然而,在 TR1 之前,这是不支持的,因此您只能投射到特定尺寸,例如:
std::size_t n = 1;
std::printf("%lu\n", static_cast<unsigned long>(n));
话又说回来,无论如何 C++ 并不真正支持
unsigned long long
,因此上面的方法可以正常工作,因为 unsigned long
是最大的合法整数类型。 TR1 之后,您可以安全地使用 %zu
来获取 size_t
值。