zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    Centos服务器搭建(3)——安装maven
    Centos服务器搭建(2)——安装tomcat
    Centos服务器搭建(1)——安装jdk
    mysql主从复制
    Json中返回换行符处理
    github pages 绑定域名
    SharePoint学习笔记——子页面
    SharePoint学习笔记——母版页
    SSH+Oracle的整合(SSH与Oracle整合坑巨多)
    SSH整合做CRUD(大神老师整理)
  • 原文地址:https://www.cnblogs.com/ransn/p/8079138.html
Copyright © 2011-2022 走看看