ReleaseBuffer函数是用来告诉CString对象,你的GetBuffer所引用的内存已经使用完毕,现在必须对它进行封口,否则 CString将不会知道它现在所包含的字符串的长度,所以在使用完GetBuffer之后,必须立即调用ReleaseBuffer函数重置 CString的内部属性,其实也就是头部信息。 补充一下: GetBuffer说白了就两个功能: 1:就是将CString里面...
很明显ReleaseBuffer的作用就是更新字符串的长度。 CString内,GetLength获取字符串长度并不是动态计算的,而是在赋值操作后计算并保存在一个int变量内的,当通过GetBuffer直接修改CString时,那个int变量并不可能自动更新,于是便有了ReleaseBuffer. 示例:下面的例子说明了如何用CString::GetBuffer和CString::ReleaseBuffer(最好逐...
CString是MFC(Microsoft Foundation Class)库中的一个类,主要用于处理字符串,在C++编程中,我们经常需要处理字符串,而CString类为我们提供了一种简单、高效的方式来处理字符串,在CString类中,Getbuffer和Releasebuffer是两个非常重要的成员函数,它们分别用于获取缓冲区和释放缓冲区,本文将详细介绍这两个函数的作用及其使用方...
CString类为路径变量是后要相加带\\的路径不能叠加的解决办法 (SHGetPathFromIDList(pidl,str1.GetBuffer(MAX_PATH))) { str1.ReleaseBuffer(MAX_PATH); //MessageBox(L"我的文档所在的文件夹所在的位置为位于:\n "+str1,L"信息提示",MB_OK); } else str1.ReleaseBuffer(MAX_PATH); } } //添加微信文 ...
能不能在ReleaseBuffer()之前通过字符串赋值放大字符串缓冲,我是以vc2010重新测试得出的结论,在其他开发环境未测试。 不过还是认为,ReleaseBuffer()之前直接操作CString字符串对象虽然没有错误,但不合适,因为字符串已经通过GetBuffer()把控制权已经给出去,再去干涉内部缓冲区,明显忘记了调用GetBuffer()的目的和意义。
ReleaseBuffer: void CString::ReleaseBuffer(int nNewLength) { CopyBeforeWrite();// just in case GetBuffer was not called if (nNewLength == -1) nNewLength = lstrlen(m_pchData);// zero terminated ASSERT(nNewLength <= GetData()->nAllocLength); ...
Copyright © Yisu Cloud Ltd. All Rights Reserved. 2018 版权所有
ReleaseBuffer: void CString::ReleaseBuffer(int nNewLength) { CopyBeforeWrite();// just in case GetBuffer was not called if (nNewLength == -1) nNewLength = lstrlen(m_pchData);// zero terminated ASSERT(nNewLength <= GetData()->nAllocLength); ...
很明显ReleaseBuffer的作用就是更新字符串的长度。 CString内,GetLength获取字符串长度并不是动态计算的,而是在赋值操作后计算并保存在一个int变量内的,当通过GetBuffer直接修改CString时,那个int变量并不可能自动更新,于是便有了ReleaseBuffer. 示例:下面的例子说明了如何用CString::GetBuffer和CString::ReleaseBuffer(最好逐...
很明显ReleaseBuffer的作用就是更新字符串的长度。 CString内,GetLength获取字符串长度并不是动态计算的,而是在赋值操作后计算并保存在一个int变量内的,当通过GetBuffer直接修改CString时,那个int变量并不可能自动更新,于是便有了ReleaseBuffer. 示例:下面的例子说明了如何用CString::GetBuffer和CString::ReleaseBuffer(最好逐...