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

时间:2009-06-02 15:07:14

标签: c++ c

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

3 个答案:

答案 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值。