[英]Why doesn't %zd printf format work in VS2010?
我的以下一段代碼不會在 Visual Studio 中打印該值。
int main() {
intptr_t P = 10;
printf("test value is %zd",P);
return 0;
}
OUTPUT:
test value is zd
我希望上面的代碼打印
test value is 10
我使用 intptr_t 而不是 integer 以使代碼在 32 位和 64 位架構中進行調整。
z
前綴未在 Microsoft 的printf
版本中定義。 我認為I
前綴可能有效。 請參閱http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx
盡管 C99 支持z
長度說明符,但 Visual Studio 2010 不支持 C99,而是符合缺少z
長度說明符的舊版本 C。 作為擴展,VS2010 確實支持I
長度說明符而不是size_t
,但這不能移植到其他平台。
我建議使用帶有%llu
說明符的unsigned long long
來代替; 開銷很小,而且它也可以移植到 C99 平台。
對於可移植代碼, #include <inttypes.h>
並在printf
格式字符串中使用PRIdPTR
。
printf("test value is %" PRIdPTR, P);
inttypes.h 的 Wikipedia 頁面有一個指向該文件版本的鏈接,該版本可以與 Visual C++ 一起使用,並且可能也可以與 VS2010 一起使用(如果 Microsoft 沒有添加 inttypes.h)。
PRIdPTR
用於intptr_t
, PRIuPTR
用於uintptr_t
。
Visual C++,截至 VS 2013,不支持 %z。 如果您希望將來的版本支持它,請對此錯誤進行投票:
要打印 size_t,您需要在 VS 中使用%Iu ,在 gcc 中使用 %zu
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.