14歳の自分に衝撃の事実を告げてください

変数を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秒
になります。
一体どうしたらいいのでしょうか?
よろしくお願いします

A 回答 (2件)

wsprintfはwindows.hに定義された関数で、printfやsprintfのCRT(C ランタイム ライブラリ)の関数に比べると機能的に劣ります。



64ビットの変数を扱う書式は用意されていないので、適切にキャストするか、
もしくはtchar.hに宣言がある_stprintf(または_stprintf_s)関数を使ってください。(printfの書式文字列のままいける)

wsprintf
http://msdn.microsoft.com/ja-jp/library/cc364872 …
sprintf_s、_sprintf_s_l、swprintf_s、_swprintf_s_l
http://msdn.microsoft.com/ja-jp/library/ce3zzk1k …
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/21 03:53

★アドアイス


>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 …
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/21 03:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報