【发布时间】:2019-09-18 07:27:55
【问题描述】:
得到这个代码:
CString CMeetingScheduleAssistantApp::UpdateDateFormatString(COleDateTime& rDate, CString strDateFormatString)
{
CString strDayNumber, strNewDateFormatString = strDateFormatString;
if (theApp.UseTranslationINI())
{
strNewDateFormatString.Replace(_T("%B"),
m_aryDateTrans[DATE_TRANS_MONTH][rDate.GetMonth() - 1]);
strNewDateFormatString.Replace(_T("%A"),
m_aryDateTrans[DATE_TRANS_DAY][rDate.GetDayOfWeek() - 1]);
strNewDateFormatString.Replace(_T("%b"),
m_aryDateTrans[DATE_TRANS_MONTH_SHORT][rDate.GetMonth() - 1]);
strNewDateFormatString.Replace(_T("%a"),
m_aryDateTrans[DATE_TRANS_DAY_SHORT][rDate.GetDayOfWeek() - 1]);
strDayNumber = rDate.Format(_T("%d"));
strNewDateFormatString.Replace(_T("%d"), strDayNumber);
strDayNumber = rDate.Format(_T("%#d"));
strNewDateFormatString.Replace(_T("%#d"), strDayNumber);
}
return strNewDateFormatString;
}
对于四行 Replace 代码,我收到代码分析警告:
警告 C26451
算术溢出:对 4 字节值使用运算符“-”,然后将结果转换为 8 字节值。在调用运算符 '-' 之前将值转换为更广泛的类型以避免溢出 (io.2)。
[ 和] 括号内的第一个值是int 类型,但第二个是1 的字面值:
变量m_aryDateTrans定义为:
CStringArray m_aryDateTrans[NUM_DATE_TRANS];
所以我不确定我需要在此处进行什么强制转换来抑制此警告。
我在 32 位和 64 位环境下编译。
【问题讨论】:
标签: c++ mfc visual-studio-2019