49

Microsoft Visual Studio2010を使用してC++で使用しているsize_t変数の値を出力したい(この特定のコードではなく使用したいので、代わりに使用する必要があるという回答はありません)。printfprintf<<<<

投稿によると

プラットフォームに依存しないsize_tcのフォーマット指定子?

プラットフォームに依存しない正しい方法はを使用すること%zuですが、これはVisualStudioでは機能しないようです。VisualStudioのドキュメント

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

使用する必要があることを教えてくれます%Iu(小文字iではなく大文字を使用l)。

Microsoftはここの標準に準拠していませんか?または、C99以降に標準が変更されましたか?それとも、CとC ++の間で標準が異なります(これは私には非常に奇妙に思えます)?

4

4 に答える 4

21

MS Visual Studioは、%zu以前はprintf指定子をサポートしていませんでしVS2013た。VS2013以降(例:_MSC_VER> = 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());
于 2017-05-18T18:20:15.133 に答える
16

MicrosoftのCコンパイラは、最新のC標準に追いついていない。これは基本的に、C99から厳選された機能を備えたC89コンパイラです(例long long)。したがって、何かがサポートされていないことは驚くべきことではありません(%zuC99に登場)。

于 2013-03-25T07:57:56.760 に答える
16

Microsoftのドキュメントには次の ように記載されています。

、、、、および長さhhのプレフィックスはサポートされていません。jzt

したがって、%zuサポートされていません。

また、使用する正しいプレフィックスsize_tI–であると記載されているため、を使用します%Iu

于 2013-12-11T20:21:59.167 に答える
7

ここからの回答に基づいて、%zC99の追加です。MSVCはそれ以降のC標準をサポートしていないため、サポートされていないのは当然のこと%zです。

于 2013-03-25T07:58:58.297 に答える