什么是使用printf来打印size_t的正确方法?
Size_t
被定义为一个unsigned
整数,但是它的大小取决于你是在32位还是在64位机器上。 什么是正确和便携的方式来打印size_t
?
尝试使用%zu
格式的string
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解决scheme不一定适用于C90。 在1995年的变化(指定__STDC__
的允许值)中引入了可靠地区分C90和C99的能力。 我不认为有一个完全可移植的方式适用于C90,C99和C ++,尽pipe这些解决scheme可以解决这些问题。
我认为,C ++的答案是:
std::size_t n = 1; std::cout << n;
对于C风格的IO来说,这有点复杂。 在C99中,他们为size_t
值添加了z
长度修饰符。 但是,在TR1之前,这是不被支持的,所以你只剩下铸造到一个特定的大小,如:
std::size_t n = 1; std::printf("%lu\n", static_cast<unsigned long>(n));
然后再一次, unsigned long long
并不真正被C ++支持,所以上面的方法可以正常工作,因为unsigned long
是最大的合法整数types。 在TR1之后,您可以安全地使用%zu
作为size_t
值。