• 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);
  • 相关阅读:
    postman使用感言
    20. 有效的括号
    13. 罗马数字转整数
    qsort / bsearch
    堆排序(heapsort)
    递归Recursion
    拓扑排序
    N/A的含义
    初级系列17.爱因斯坦的数学题问题
    初级系列16.求车速问题
  • 原文地址:https://www.cnblogs.com/ransn/p/8079138.html
Copyright © 2020-2023  润新知