49

我想使用 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++ 之间的标准不同(这对我来说似乎很奇怪)?

4

4 回答 4

21

MS Visual Studio 之前不支持%zuprintf 说明符VS2013。从 VS2013 开始(例如_MSC_VER>= 1800%zu 可用

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

printf("count: %d\n", (int)str.size()); // less digital ink spent
// or:
printf("count: %u\n", (unsigned)str.size());
于 2017-05-18T18:20:15.133 回答
16

微软文档 指出:

不支持、hhj和length 前缀zt

因此%zu不支持。

它还指出要使用的正确前缀size_tI- 所以你会使用%Iu.

于 2013-12-11T20:21:59.167 回答
16

微软的 C 编译器没有赶上最新的 C 标准。它基本上是一个 C89 编译器,带有一些从 C99 中挑选出来的特性(例如long long)。因此,不支持某些东西(%zu出现在 C99 中)也就不足为奇了。

于 2013-03-25T07:57:56.760 回答
7

根据这里的答案,%z是 C99 的补充。由于 MSVC 不支持任何后来的 C 标准,因此%z不受支持也就不足为奇了。

于 2013-03-25T07:58:58.297 回答