今天調試程序,CS太ring對象中明明有值CString.GetLength返回值爲0,代碼如下
CString m_sername;
CString s="hello "
m_sername=s;
此時s.GetLength()=0;
經網上查找,找到原因在str1.ReleaseBuffer(); 其實CString::ReleaseBuffer只是一個形象的說法,完全是跟GetBuffer對應而起的名字。
我們來看看MFC中ReleaseBuffer的代碼:
void ReleaseBuffer( int nNewLength = -1 )
{
if( nNewLength == -1 )
{
nNewLength = StringLength( m_pszData );
}
SetLength( nNewLength );
}
很明顯ReleaseBuffer只有一個作用,就是更新字符串的長度。CString內,GetLength獲取字符串長度並不是動態計算的,而是在賦值操作後計算並保存在一個int變量內的,當通過GetBuffer直接修改CString時,那個int變量並不可能自動更新,於是便有了ReleaseBuffer。
因此以上代碼加上s.ReleaseBuffer();後再s.GetLength()就OK了。