• ベストアンサー

wsprintfの書式制御文字列について教えてください

変数をLONGLONGで宣言してる場合 printfの場合 printf("%lld時間%02lld分%02lld秒\n",h,m,s); だと 289時間00分55秒 でちゃんと表示できますが wsprintf(szWork,TEXT("%lld時間%02lld分%02lld秒"),h,m,s); だと ld時間ld分ld秒 になります。 一体どうしたらいいのでしょうか? よろしくお願いします

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

  • ベストアンサー
回答No.1

wsprintfはwindows.hに定義された関数で、printfやsprintfのCRT(C ランタイム ライブラリ)の関数に比べると機能的に劣ります。 64ビットの変数を扱う書式は用意されていないので、適切にキャストするか、 もしくはtchar.hに宣言がある_stprintf(または_stprintf_s)関数を使ってください。(printfの書式文字列のままいける) wsprintf http://msdn.microsoft.com/ja-jp/library/cc364872.aspx sprintf_s、_sprintf_s_l、swprintf_s、_swprintf_s_l http://msdn.microsoft.com/ja-jp/library/ce3zzk1k(VS.80).aspx

googleoooo
質問者

お礼

回答ありがとうございます。 _stprintfを使用して解決しました。

その他の回答 (1)

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

★アドアイス >ld時間ld分ld秒 >になります。  ↑  これは『%lld』の書式制御文字をサポートしていないからです。  MSDN(日本語版)を調べてみましたが公式には書かれていないですが  『%I64d』や『%I64u』でちゃんと変換してくれます。 サンプル: TCHAR szBuff[ 256 ]; LONGLONG i64 = 1; for ( INT i = 0 ; i < 64 ; i++ ){  wsprintf( szBuff, "%I64u", i64 );  printf( "%02d: %s\n", i, szBuff );  i64 = i64 + i64 + 1; } 実行結果: 00: 1 01: 3 02: 7 03: 15 : 31: 4294967295 32: 8589934591 : 62: 9223372036854775807 63: 18446744073709551615 とちゃんと変換されます。

参考URL:
http://msdn.microsoft.com/ja-jp/library/cc364872.aspx
googleoooo
質問者

お礼

回答ありがとうございます %I64dは使用できるのですね。 参考になりました

関連するQ&A