• ベストアンサー

INT64対応のprintf系関数はありますか?

WindowsXP & Visual C++という環境でソフト開発しています。 大きな整数を扱うのでINT64を使用しているのですが、sprintf関数で整数を表示する為に「%d」を使うと、32ビット整数にしか対応していないらしく、正しく動作しないことが分かりました。 64ビット整数に対応したprintf系の関数群は存在するのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★VC++のバージョンは何でしょうか? ・VC++6.0以前…long long型には対応していない(書式制御文字列については分かりません)  VC++2003……long long型には対応、ただし書式制御文字列は『%I64d』『%I64u』です。  VC++2005……long long型に対応、書式制御文字列は『%lld』『%llu』です。  VC++2008……VC++2005と同じだと思う(未確認) ・参考にして下さい。

BearCave
質問者

お礼

%I64dで解決しました。ありがとうございました。

その他の回答 (3)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.4

long long int て必ず 64bit なんでしたっけ? わざわざ型の宣言で long long int でなくて明示的に INT64 としているのだっだら、書式指定時にも %I64d とした方がよいような気がする。

BearCave
質問者

お礼

%I64dで解決しました。ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

手元で調べた限りでは long long が 64ビットのようだから, %lld でいけるはず. 他の処理系のことも考えるならこっちの方が安全. C99 なら inttypes.h を #include すればいいんだけど, Microsoft って C99 に対応したがらないんですよね.

BearCave
質問者

お礼

%I64dで解決しました。ありがとうございました。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

MSDN には ----- 書式指定は、省略可能なフィールドと必須フィールドを使用して次の形式で行います。 %[flags] [width] [.precision] [{h | l | ll | I | I32 | I64}]type ----- て書いてあるから、%I64d とか書けばいいんじゃない?

BearCave
質問者

お礼

%I64dで解決しました。ありがとうございました。

関連するQ&A