【语言-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... } }
相关文章推荐
- 关于c++中函数的返回值
- C/C++语言之通过定义指针函数方式来实现在一个cpp文件里面获取另外一个cpp文件函数的返回值
- 关于C++对函数传参与函数返回值进行引用传递的详解
- 关于在C/C++语言中,函数如何返回数组,数组如何作为参数传递以及返回数组的函数该如何调用问题的总结
- C++中关于文件操作的函数
- 关于C++中函数指针的使用
- C/C++语言中指向函数的指针
- 关于C生成的汇编与C++生成的汇编在函数名称上的差异
- C/C++语言中指向函数的指针
- 如何在C/C++语言中调用 sqlite 的函数
- C/C++语言中指向函数的指针
- 关于C++的一些细节[五:函数-中级]
- C++笔试题 关于函数析构函数未调用的问题
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- (转)关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- C++中函数中参数和返回值都是用户定义类型(这里主要是类的情况时的分析)
- 关于C++的一些细节[五:函数-基础]
- 关于栈的弹出函数设计是否应该有两个返回值,一个表示数据,一个表示是否栈为空
- 关于C++中函数指针的使用(包含对typedef用法的讨论)