我想在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
的格式说明符?
答案 0 :(得分:102)
是:使用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
)和{{1} }(对于L
)。参见C99标准的第7.19.6.1(7)节。
答案 1 :(得分:35)
是的,有。它是%zu
(在ANSI C99中指定)。
size_t size = 1;
printf("the size is %zu", size);
请注意size_t
是无符号的,因此%ld
是双重错误的:错误的长度修饰符和错误的格式转换说明符。如果您想知道,%zd
适用于ssize_t
(已签名)。
答案 2 :(得分:0)
MSDN,表示Visual Studio支持32位和64位平台上可移植代码的“I”前缀。
size_t size = 10;
printf("size is %Iu", size);