使用 printf 打印 size_t 的正确方法是什么?

问题描述 投票:0回答:3

size_t
被定义为
unsigned
整数,但它的大小取决于您使用的是 32 位还是 64 位机器。打印
size_t
的正确且便携的方法是什么?

c++ c printf size-t
3个回答
130
投票

尝试使用

%zu
格式字符串

size_t val = get_the_value();
printf("%zu",val);

z 部分是一个长度说明符,表示参数的长度为 size_t。

来源 - http://en.wikipedia.org/wiki/Printf#printf_format_placeholders


10
投票

这里有一个 C++ 标签,所以

cout <<
是另一个可能的答案。

这在 C 的所有版本中都很难得到正确的结果。在 C90 中,转换为

unsigned long
应该可以工作,但这可能在 C99 中不起作用,并且 C99 解决方案不一定在 C90 中工作。 1995 年的变更中引入了可靠区分 C90 和 C99 的能力(指定
__STDC__
的允许值)。我认为没有一种完全可移植的方法适用于 C90、C99 和 C++,尽管对于其中任何一个都有解决方案。


9
投票

我认为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
值。

© www.soinside.com 2019 - 2024. All rights reserved.