当前位置: 首页 > news >正文

CString的GetBuffer用法

转自:http://blog.163.com/shi_shun/blog/static/23707849201023133945192/


一.函数原型

CString::GetBuffer

LPTSTR GetBuffer( int nMinBufLength );

throw( CMemoryException );

Return Value

An LPTSTR pointer to the object’s (null-terminated) character buffer.

Parameters

nMinBufLength

The minimum size of the character buffer in characters. This value does not include space for a null terminator.

Remarks

Returns a pointer to the internal character buffer for the CString object. The returned LPTSTR is not const and thus allows direct modification of CString contents.

If you use the pointer returned by GetBuffer to change the string contents, you must call ReleaseBuffer before using any other CString member functions.

二.函数作用及使用范围

对一个CString变量,你可以使用的唯一合法转换符是LPCTSTR,直接转换成非常量指针LPTSTR-[const] char*)是错误的。正确的得到一个指向缓冲区的非常量指针的方法是调用GetBuffer()方法。

GetBuffer()主要作用是将字符串的缓冲区长度锁定,releaseBuffer则是解除锁定,使得CString对象在以后的代码中继续可以实现长度自适应增长的功能。

CString ::GetBuffer有两个重载版本:

LPTSTR GetBuffer( );LPTSTR GetBuffer(int nMinBufferLength);

在第二个版本中,当设定的长度小于原字符串长度时,nMinBufLength = nOldLen,该参数会被忽

略,不分配内存,指向原CString;当设定的长度大于原字符串本身的长度时就要重新分配(reallocate)一块比较大的空间出来。而调用第一个版本时,应如通过传入0来调用第二个版本一样。

是否需要在GetBufer后面调用ReleaseBuffer(),是根据你的后面的程序是否需要继续使用该字符串变量,并且是否动态改变其长度而定的。如果你GetBuffer以后程序自函数就退出,局部变量都不存在了,调用不调用ReleaseBuffer没什么意义了。

最典型的应用就是读取文件:

CFile file;

// FILE_NAME 为实现定义好的文件名称

if(file.Open(FILE_NAME,CFile::modeRead))

{

       CString szContent;

       int nFileLength = file.GetLength();

       file.Read(szContent.GetBuffer(nFileLength),nFileLength);

       szContent.ReleaseBuffer();

       // 取得文件內容放在szContent中,我们之后可以对其操作

}

相关文章:

  • ARX 常用函数2
  • 各大网站M8评测集结
  • OBJECT ARX 遍历数据库所有图元代码
  • OBJECT ARX 总结5道题
  • ARX 选择集获得所有图形 遍历 实例 备忘
  • ARX 实体的偏移
  • XP系统优化简单实用技法收藏
  • ARX 集合类型 AcGe类
  • ARX 创建组实例(新建组,选择实体添加到组,输入层,修改组所在的层)
  • Firefox 3.1 Beta 3下周推出 新增Beta 4
  • C# 使用zedgraph绘制 柱状图
  • [Web开发] 网页的浏览器兼容性测试工具
  • [Windows编程] 如何捕捉程序异常/crash 并生成 dump 文件
  • zed graph使用经验
  • vim语法高亮
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【RocksDB】TransactionDB源码分析
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • C++11: atomic 头文件
  • es6要点
  • happypack两次报错的问题
  • IndexedDB
  • k8s如何管理Pod
  • k个最大的数及变种小结
  • LeetCode29.两数相除 JavaScript
  • leetcode386. Lexicographical Numbers
  • php中curl和soap方式请求服务超时问题
  • Vue全家桶实现一个Web App
  • 大快搜索数据爬虫技术实例安装教学篇
  • 前端
  • 三分钟教你同步 Visual Studio Code 设置
  • 说说动画卡顿的解决方案
  • 详解移动APP与web APP的区别
  • 一起参Ember.js讨论、问答社区。
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $.proxy和$.extend
  • (03)光刻——半导体电路的绘制
  • (09)Hive——CTE 公共表达式
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (篇九)MySQL常用内置函数
  • (强烈推荐)移动端音视频从零到上手(下)
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET Framework杂记
  • .NET 服务 ServiceController
  • .Net各种迷惑命名解释
  • .NET开发不可不知、不可不用的辅助类(一)
  • .Net面试题4
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .pub是什么文件_Rust 模块和文件 - 「译」