看这段代码
long long dddd = (*lsIterator)->m_status.m_nIn;
long long cccc = (*lsIterator)->m_status.m_nInTimes;
tmpStr.Format(L"%d/%d/%d", dddd, cccc, 45);
监视窗口显示啥:
dddd 27992 __int64
cccc 8 __int64
+ tmpStr "27992/0/8" ATL::CStringT<wchar_t,StrTraitMFC<wchar_t,ATL::ChTraitsCRT<wchar_t> > >
很奇怪,似乎与stl的list有关系,因为如果用
int fuck = 56;
tmpStr.Format(L"%d/%d/%d", 44, fuck, 45);
是没问题的,
是不是我的list用错了,一旦format参数使用到iterator相关的参数就不对了?
list<CBaseSocket*>::iterator lsIterator;
for (lsIterator = m_sConnectSockets.begin(); 
lsIterator != m_sConnectSockets.end(); 
lsIterator++)
{
long long dddd = (*lsIterator)->m_status.m_nIn;
long long cccc = (*lsIterator)->m_status.m_nInTimes;
tmpStr.Format(L"%d/%d/%d", dddd, cccc, 45);
}

解决方案 »

  1.   

    哈哈,
    试了下
    int dddd = (*lsIterator)->m_status.m_nIn;
    int cccc = (*lsIterator)->m_status.m_nInTimes; 
    这样就可以了,难道CString::Fromat对数据长度有要求?
      

  2.   

    m_status.m_nIn ,m_status.m_nInTimes是int型的
      

  3.   

    使用 Format(_T("%I64/%I64"), ……
    format中的格式长度需要与数据匹配