您的位置:首页 > 编程语言 > C语言/C++

【语言-C++】关于CString 函数GetLength()返回值等于0

2016-10-26 16:42 323 查看

代码解读

CString 函数GetLength()

int GetLength() const throw()
{
return( GetData()->nDataLength );
}


CString的字符串长度是存在一个nDataLength(int型)的变量中,而nDataLength(int型)不是实时更新的,我们再看下面一个函数ReleaseBuffer

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...
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: