size_t 的正确 printf 格式说明符:%zu 或 %Iu?

问题描述 投票:0回答:4

我想使用 Microsoft Visual Studio 2010 在 C++ 中使用

size_t
打印出
printf
变量的值(我想在这段特定的代码中使用
printf
而不是
<<
,所以请不要告诉答案我应该用
<<
来代替)。

根据帖子

c 中与平台无关的 size_t 格式说明符?

正确的与平台无关的方法是使用

%zu
,但这在Visual Studio中似乎不起作用。 Visual Studio 文档位于

http://msdn.microsoft.com/en-us/library/vstudio/tcxf1dw6.aspx

告诉我必须使用

%Iu
(使用大写
i
,而不是小写
l
)。

微软不遵循这里的标准吗?或者说自C99以来标准已经改变了?或者 C 和 C++ 之间的标准不同(这对我来说似乎很奇怪)?

c++ c visual-studio-2010 printf format-specifiers
4个回答
25
投票

MS Visual Studio 在

%zu
之前不支持
VS2013
printf 说明符。从 VS2015 开始(例如
_MSC_VER
>=
1900
%zu
可用

作为替代方案,对于以前版本的 Visual Studio,如果要打印较小的值(例如 std 容器中的元素数量),您可以简单地转换为

int
并使用
%d
:

printf("count: %d\n", (int)str.size()); // less digital ink spent
// or:
printf("count: %u\n", (unsigned)str.size());

15
投票

微软的C编译器没有赶上最新的C标准。它基本上是一个 C89 编译器,具有一些从 C99 中精选的功能(例如

long long
)。因此,某些内容不受支持也就不足为奇了(
%zu
出现在 C99 中)。


14
投票

Microsoft 文档 指出:

不支持

hh
j
z
t
长度前缀。

因此不支持

%zu

它还指出,用于

size_t
的正确前缀是
I
– 因此您可以使用
%Iu


5
投票

根据here的答案,

%z
是C99的补充。由于 MSVC 不支持任何后续的 C 标准,因此不支持
%z
也就不足为奇了。

© www.soinside.com 2019 - 2024. All rights reserved.