以下是我的代码片段,在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位架构。
以下是我的代码片段,在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位架构。
printf
函数中,微软的版本不支持z
前缀。我认为使用I
前缀可能会有效果。请参考http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx
z
长度说明符,但Visual Studio 2010不支持C99,而是符合较早版本的C,该版本缺少z
长度说明符。作为扩展,VS2010支持I
长度说明符用于size_t
,但这在其他平台上不可移植。%llu
说明符的unsigned long long
;开销很小,也适用于C99平台。%llu
选项,只能使用%lld
。而且你需要将参数转换为正确的大小。 - Mark Ransom为了编写可移植的代码,在你的 printf
格式字符串中,需要使用 PRIdPTR
,并且引入 #include <inttypes.h>
头文件。
printf("test value is %" PRIdPTR, P);
inttypes.h维基页面有一个链接,可以下载适用于Visual C++的文件版本,这个版本也可能适用于VS2010(如果Microsoft没有添加inttypes.h的话)。
PRIdPTR
代表intptr_t
,PRIuPTR
代表uintptr_t
。
截至VS 2013,Visual C++不支持%z。如果您希望未来版本支持它,请在此错误上投票: