以下代码不会在visual studio中打印该值。
int main() {
intptr_t P = 10;
printf("test value is %zd",P);
return 0;
}
输出:
test value is zd
我希望上面的代码打印
test value is 10
我使用intptr_t而不是整数,以便在32位和64位架构中调整代码。
答案 0 :(得分:4)
Microsoft的z
版本中未定义printf
前缀。我认为I
前缀可能有用。见http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx
答案 1 :(得分:4)
虽然C99支持z
长度说明符,但Visual Studio 2010不支持C99,而是符合缺少z
长度说明符的旧版C。作为扩展,VS2010确实支持I
length specifier代替size_t
,但这不能移植到其他平台。
我建议使用unsigned long long
代替%llu
说明符;开销很小,也可以移植到C99平台。
答案 2 :(得分:2)
对于便携式代码,#include <inttypes.h>
并使用PRIdPTR
格式字符串中的printf
。
printf("test value is %" PRIdPTR, P);
Wikipedia page for inttypes.h有一个指向该文件版本的链接,该文件将与Visual C ++一起使用,并且可能也适用于VS2010(如果Microsoft没有添加inttypes.h)。
PRIdPTR
适用于intptr_t
,PRIuPTR
适用于uintptr_t
。
答案 3 :(得分:1)
Visual C ++,自VS 2013起,不支持%z。如果您希望将来的版本支持它,那么就这个错误投票:
答案 4 :(得分:0)
要打印size_t,您需要在VS中使用%Iu ,在gcc中使用%zu