簡體   English   中英

為什么 %zd printf 格式在 VS2010 中不起作用?

[英]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_tPRIuPTR用於uintptr_t

Visual C++,截至 VS 2013,不支持 %z。 如果您希望將來的版本支持它,請對此錯誤進行投票:

https://connect.microsoft.com/VisualStudio/feedback/details/806338/vc-printf-and-scanf-should-support-z

要打印 size_t,您需要在 VS 中使用%Iu ,在 gcc 中使用 %zu

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM