CString.GetLength返回值爲0解決辦法

今天調試程序,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了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章