MFC CString GetBuffer/ReleaseBuffer 的使用条件

 

 

今天为了通过串口往单片机里写一个16进制字符去控制单片机的adc的起停,结果糊涂到把'x01'误写成'x01',怎么也得不到意想的结果,程序员有时候会犯低级错误,有时候怎么也跳不出去,这时候通过写一个测试程序也许就能发现端倪。

下面说说正题。

 // get pointer to modifiable buffer at least as long as nMinBufLength
 LPTSTR GetBuffer(int nMinBufLength);
 // release buffer, setting length to nNewLength (or to first nul if -1)
 void ReleaseBuffer(int nNewLength = -1);

用mfc来开发很多会遇到cstring类,对上面的两个函数,有的人很久都没有搞明白是怎么回事,看上面的英文解释。GetBuffer通常是我们希望用到cstring类的字符串的指针,通常传0,如果对返回的指针指向的内容没有修改的话,就不需要调用ReleaseBuffer了,如果修改了这个指针指向的内容,就需要调用ReleaseBuffer了,通常传-1,即重新设置buffer长度为字符串的lengh

看看下面的代码,没有调用ReleaseBuffer的话长度变成16,但内容却是"abc",也就是说后面的拼接"123456789”没有起作用。这就印证了我上面所说的。

 CString abc = _T("abcdefg");
 LPTSTR str = abc.GetBuffer(0);
 str[3] = '';
 //abc.ReleaseBuffer();

abc += _T("123456789");
 int length = abc.GetLength();

AfxMessageBox(abc);
原文地址:https://www.cnblogs.com/ransn/p/8079138.html