独立于平台的size_t c中的格式说明符
我想用C打印出一个size_t
types的variables,但是看起来size_t
在别的体系结构上被别名为不同的variablestypes。 例如,在一台机器上(64位),以下代码不会引发任何警告:
size_t size = 1; printf("the size is %ld", size);
但在我的其他机器(32位)上面的代码产生以下警告消息:
警告:格式'%ld'需要input'long int *',但参数3的types是'size_t *'
我怀疑这是由于指针大小的差异,所以在我的64位机器size_t
被别名为long int
( "%ld"
),而在我的32位机器size_t
别名为另一种types。
是否有一个格式说明符专门为size_t
?
是:使用z
长度修饰符:
size_t size = sizeof(char); printf("the size is %zd\n", size); // decimal size_t printf("the size is %zx\n", size); // hex size_t
可用的其他长度修饰符是hh
( char
), h
( short
), l
( long
), ll
( long long
), j
( intmax_t
), t
(用于ptrdiff_t
)和L
long double
)。 参见C99标准的§7.19.6.1(7)。
就在这里。 它是%zu
(按照ANSI C99的规定)。
size_t size = 1; printf("the size is %zu", size);
请注意, size_t
是无符号的,因此%ld
是双重错误:错误的长度修饰符和错误的格式转换说明符。 如果你想知道, %zd
是ssize_t
(已签名)。
MSDN说,Visual Studio支持在32和64位平台上可移植代码的“I”前缀。
size_t size = 10; printf("size is %Iu", size);