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

代码解读

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...
	}
}





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值