Size_t
is defined as an unsigned
integer, but the size of it depends on whether you're on a 32 or 64-bit machine. What's the correct and portable way to print out a size_t
?
相关问题
- Sorting 3 numbers without branching [closed]
- Multiple sockets for clients to connect to
- How to compile C++ code in GDB?
- Why does const allow implicit conversion of refere
- thread_local variables initialization
I think that the C++ answer is:
For C-style IO it's a little more complicated. In C99 they added the
z
length modifier forsize_t
values. However, previous to TR1 this is not supported so you are left with casting to a specific size like:Then again,
unsigned long long
isn't really supported by C++ anyway so the above will work fine sinceunsigned long
is the largest legal integral type. After TR1 you can use%zu
safely forsize_t
values.Try using the
%zu
format stringThe z portion is a length specifier which says the argument will be size_t in length.
Source - http://en.wikipedia.org/wiki/Printf#printf_format_placeholders
There's a C++ tag on this, so
cout <<
is another possible answer.This is surprisingly hard to get right in all versions of C. In C90, casting to
unsigned long
should work, but that may well not work in C99, and the C99 solutions won't necessarily work in C90. The ability to reliably distinguish between C90 and C99 was introduced in the 1995 changes (specifying the allowable values for__STDC__
). I don't think there is a completely portable way that works for C90, C99, and C++, although there are solutions for any individual one of those.