CStringT

[戻る]
てんてく 2009/11/12(木) 17:49:06
環境VS2008,MFC WindowsXP

CTimeSpanをフォーマットしていて
 CString s;
 CTimeSpan time(0, 1, 3, 33);
 s.Format(_T("%d : %d : %d\n"), time.GetDays()*24 + time.GetHours(),
  time.GetMinutes(), time.GetSeconds());
 TRACE(s);

期待される結果として 1 : 3 : 33
なはずなのですが実行すると1: 0: 3
となってしまいます。同じ結果になる方はいらっしゃいますか?
(time.GetDays()*24 + time.GetHours()), としてみても評価は変らないようで困ってい
ます。原因わかる方よろしくお願い致します。

maru 2009/11/12(木) 18:25:05
> 原因わかる方よろしくお願い致します。
CTimeSpanのGetDaysメンバは
 LONGLONG GetDays( ) const throw( );
だから、
 time.GetDays()*24 + time.GetHours()
は64ビット長で、int 二つ分に相当するから。

てんてく 2009/11/12(木) 18:38:08
[[解決]]
ありがとうございます。
VC6.0からの移行で戻り値のチェックをしていませんでした。今後気をつけたいと思います!

FlatWest 2009/11/12(木) 18:40:42
s.Format(_T("%I64d : %d : %d\n"), ・・・);

古いスレッドには追加発言できません。