CString的GetData和GetBuffer到底有什么不同

如题所述

LPTSTR CString::GetBuffer(int nMinBufLength),它的实现方法是:
首先通过CString::GetData()取得CStringData对象的指针。该指针是通过存放字符串的指针m_pchData先后偏移sizeof(CStringData),从而得到了CStringData的地址。
然后根据参数nMinBufLength给定的值重新实例化一个CStringData对象,使得新的对象里的字符串缓冲长度能够满足nMinBufLength。
然后在重新设置一下新的CStringData中的一些描述值。
最后将新CStringData对象里的字符串缓冲直接返回给调用者。
温馨提示:内容为网友见解,仅供参考
无其他回答

CString的GetData和GetBuffer到底有什么不同
首先通过CString::GetData()取得CStringData对象的指针。该指针是通过存放字符串的指针m_pchData先后偏移sizeof(CStringData),从而得到了CStringData的地址。然后根据参数nMinBufLength给定的值重新实例化一个CStringData对象,使得新的对象里的字符串缓冲长度能够满足nMinBufLength。然后在重新设置一下新的CStrin...

MFC CString::GetBuffer
从MSDN的官方解释来说,GetBuffer是将字符串的缓冲区长度锁定,releaseBuffer是解除锁定,那么在进行CString操作前,应该releaseBuffer。其实从底层代码上看,是这样的,MessageBox(k1)不报错,是因为地址空间确实已经赋值,内存中有东西。但实际上,在release之前,不仅GetAt报错,GetLength获取到的长度是0,那么...

GetBuffer函数说明
GetBuffer是一个MFC函数,它隶属于CString、CBookMark和CBaseAllocator类。这个函数的主要作用是为CString对象提供对其内部字符缓冲区的访问。返回的LPTSTR并非const类型,这意味着可以直接对CString的内容进行修改。当调用GetBuffer时,如果nMinBufLength的值大于当前缓冲区的长度,函数会销毁当前缓冲区,然后创建一...

GetBuffer使用示例
这里,GetBuffer避免了在CString外部手动申请和复制内存的繁琐过程,提高了效率。而ReleaseBuffer则确保了字符串长度信息的更新,维持了对象的正确状态。

CString在使用时显示“应用{…}初始化聚合对象”是什么错误?
这个问题是由于用的是CString没有实例化或者是说没有动态分配内存,声明的三个变量的m_pch指针没有指向任何数据,默认有函数自动分配的默认地址,就像你声明几个int型的都没有初始化,他们的默认地址都是一样的。用的是strcpy调用getBuffer来给CString的指针赋值,三个指针指向同一个字符串常量。CString ...

cstring.getbuffer作用
获得cstring里的字符的指针.可以继续操作

MFC的CString的数据结构
跟java里面的StringBuilder更类似,不是java里String那样的不变对象。CString采用的是顺序存储。源代码用了条件编译,可读性不好。 class CString{public:\/\/ Constructors \/\/ constructs empty CString CString(); \/\/ copy constructor CString(const CString& stringSrc); \/\/ from a single character CString(TCHAR ch...

关于Getbuffer()
首先你没理解GetBuffer(int nMinBuflength)这个函数,首先他的参数是至少要输入的字符个数。其次他的返回值是个指向CSring类的指针。为何你要输入一个指针?给你个MSDN的例子吧!CString str;char* pc = str.GetBuffer(256); \/\/ need at least 256 bytes of space for (int i=1; i<256; i+...

C++ GetBuffer(0)和GetBuffer(1)有什么区别
它的参数的作用就是从CString类获得缓冲区的最小长度,相比0、1和str.GetBuffer(str.Getlength())没什么区别,因为所获得的缓冲区大小都是str.Getlength(),当参数大于str.Getlength()时,就有区别了,注意是最小长度。

(C++) CString转string 怎么转!!用GetBuffer()不行的!!!
std::string imgpath=stra.GetBuffer(0);stra.ReleaseBuffer();std::string->CString 例子:CString strMfc;std::string strStl=“test“;strMfc=strStl.c_str();AfxExtractSubString是截取字符串的函数,很好用,不过美中不足的地方在与它只能使用单个字符作为分割符。但是这种情况在很多时候都行...

相似回答