t c中的格式说明符?

我想用C打印出一个size_t类型的变量,但是看起来size_t在别的体系结构上被别名为不同的变量类型。 例如,在一台机器上(64位),以下代码不会引发任何警告:

size_t size = 1;
printf("the size is %ld", size);

但在我的其他机器上(32位),上面的代码会产生以下警告消息:

警告:格式'%ld'需要类型'long int *',但参数3的类型为'size_t *'

我怀疑这是由于指针大小的差异造成的,所以在我的64位机器size_t被别名为long int"%ld" ),而在我的32位机器上size_t被别名为别的类型。

是否有一个格式说明符专门为size_t


是:使用z长度修饰符:

size_t size = sizeof(char);
printf("the size is %zdn", size);  // decimal size_t
printf("the size is %zxn", size);  // hex size_t

可用的其他长度修饰符是hhchar ), hshort ), llong ), lllong long ), jintmax_t ), t (用于ptrdiff_t )和Llong 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);
链接地址: http://www.djcxy.com/p/72207.html

上一篇: t Format specifiers in c?

下一篇: CharSequence VS String in Java?