独立于平台的size_t c中的格式说明符

我想用C打印出一个size_ttypes的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 

可用的其他长度修饰符是hhchar ), hshort ), llong ), lllong long ), jintmax_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是双重错误:错误的长度修饰符和错误的格式转换说明符。 如果你想知道, %zdssize_t (已签名)。

MSDN说,Visual Studio支持在32和64位平台上可移植代码的“I”前缀。

 size_t size = 10; printf("size is %Iu", size); 
Interesting Posts