Size_t
被定义为unsigned
整数,但它的大小取决于您是使用32位还是64位计算机。打印size_t
的正确和便携方式是什么?
答案 0 :(得分:97)
尝试使用%zu
格式字符串
size_t val = get_the_value();
printf("%zu",val);
z部分是一个长度说明符,表示参数的长度为size_t。
来源 - http://en.wikipedia.org/wiki/Printf#printf_format_placeholders
答案 1 :(得分:8)
这里有一个C ++标签,所以cout <<
是另一个可能的答案。
在C的所有版本中都很难做到这一点。在C90中,转换为unsigned long
应该可以工作,但这在C99中可能不起作用,而C99解决方案不一定适用于C90。 1995年的变化(指定__STDC__
的允许值)引入了可靠地区分C90和C99的能力。我不认为有一种完全可移植的方式适用于C90,C99和C ++,尽管有针对任何一个的解决方案。
答案 2 :(得分:7)
我认为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
值。