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
可用的其他长度修饰符是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);
链接地址: http://www.djcxy.com/p/72207.html