代码解读
CString 函数GetLength()
int GetLength() const throw()
{
return( GetData()->nDataLength );
}
CString 函数ReleaseBuffer()
void ReleaseBuffer(_In_ int nNewLength = -1)
{
if( nNewLength == -1 )
{
int nAlloc = GetData()->nAllocLength;
nNewLength = StringLengthN( m_pszData, nAlloc);
}
SetLength( nNewLength );
}
CString的ReleaseBufferbuffer函数中有一个SetLength,设置字符串长度,我们再看一下SetLength函数
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...
}
}