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