CString.Format 的怪問題
我的 ThermalTest 程式,在顯示 "已經過" 的時間時,會出現奇怪的問題,似乎所有的參數都往後移一位,原本顯示 "秒" 的變成 "分"、顯示 "分" 的變成 "小時",依此類推。
後來發現是 GetDays( ) 造成的,它的傳回值是 LONGLONG,但是 Format 只用 %d,因此造成參數溢位往後推擠,只要將 %d 改成 %lld 就可以了。
參考:Size and Distance Specification
另發現我當時有另一種解法,但不知為何程式沒有 Release
str = tPeriod.Format(_T(" 已經過 %D 天 %H:%M:%S\n"));
參考:CTimeSpan::Format
// TODO: Add your message handler code here and/or call default
CTime tNow = CTime::GetCurrentTime();
CString str, strResult, strFile;
// 經過時間
CTimeSpan tPeriod = tNow - m_tStart;
strResult.Format("%04d/%02d/%02d %02d:%02d:%02d", tNow.GetYear(), tNow.GetMonth(), tNow.GetDay(), tNow.GetHour(), tNow.GetMinute(), tNow.GetSecond());
strFile = strResult;
str.Format(" 已經過 %d 天 %02d:%02d:%02d\n", tPeriod.GetDays(), tPeriod.GetHours(), tPeriod.GetMinutes(), tPeriod.GetSeconds());
strResult += str;
後來發現是 GetDays( ) 造成的,它的傳回值是 LONGLONG,但是 Format 只用 %d,因此造成參數溢位往後推擠,只要將 %d 改成 %lld 就可以了。
參考:Size and Distance Specification
另發現我當時有另一種解法,但不知為何程式沒有 Release
str = tPeriod.Format(_T(" 已經過 %D 天 %H:%M:%S\n"));
參考:CTimeSpan::Format
留言