我想使用Microsoft Visual Studio 2010在C ++中使用size_t
打印出printf
变量的值(我希望在此使用printf
代替<<
具体的代码,所以请不要回答告诉我应该使用<<
代替。
根据帖子
正确的与平台无关的方法是使用%zu
,但这似乎在Visual Studio中不起作用。
http://msdn.microsoft.com/en-us/library/vstudio/tcxf1dw6.aspx
告诉我必须使用%Iu
(使用大写i
,而不是小写l
)。
Microsoft是否未遵循此处的标准?或者自C99以来标准是否已更改?或者C和C ++之间的标准是不同的(这对我来说似乎很奇怪)?
答案 0 :(得分:18)
答案 1 :(得分:16)
Microsoft的C编译器无法满足最新的C标准。它基本上是一个C89编译器,带有一些来自C99的精选功能(例如long long
)。因此,不应该支持某些内容(%zu
出现在C99中)。
答案 2 :(得分:8)
MS Visual Studio在%zu
之前不支持VS2013
printf说明符。从VS2013开始(例如_MSC_VER
&gt; = 1800
)%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());
答案 3 :(得分:6)
根据here的答案,%z
是C99的补充。由于MSVC不支持任何后来的C标准,因此不支持%z
。