- ベストアンサー
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秒 になります。 一体どうしたらいいのでしょうか? よろしくお願いします
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (1)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドアイス >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 とちゃんと変換されます。
お礼
回答ありがとうございます %I64dは使用できるのですね。 参考になりました
お礼
回答ありがとうございます。 _stprintfを使用して解決しました。