【語言-C++】關於CString 函式GetLength()返回值等於0
阿新 • • 發佈:2019-01-04
程式碼解讀
CString 函式GetLength()
int GetLength() const throw()
{
return( GetData()->nDataLength );
}
CString的字串長度是存在一個nDataLength(int型)的變數中,而nDataLength(int型)不是實時更新的,我們再看下面一個函式ReleaseBuffer
CString 函式ReleaseBuffer()
CString的ReleaseBufferbuffer函式中有一個SetLength,設定字串長度,我們再看一下SetLength函式void ReleaseBuffer(_In_ int nNewLength = -1) { if( nNewLength == -1 ) { int nAlloc = GetData()->nAllocLength; nNewLength = StringLengthN( m_pszData, nAlloc); } SetLength( nNewLength ); }
CString 函式SetLength(int nLength)
void SetLength(_In_ int nLength) { ATLASSERT( nLength >= 0 ); ATLASSERT( nLength <= GetData()->nAllocLength ); if( nLength < 0 || nLength > GetData()->nAllocLength) AtlThrow(E_INVALIDARG); GetData()->nDataLength = nLength; m_pszData[nLength] = 0; }
可以看出在SetLength函式中,nDataLength(int型)的變數被重新附上當前字串申請空間的長度。因此可得,在使用GetLength()之前最好是使用ReleaseBuffer()強制重新整理一下nDataLength(int型)變數,避免不必要的錯誤發生。
示例:
void fun( CString str)
{
str.ReleaseBuffer();
if (str.GetLength() > 0)
{
//Do...
}
}