CString::GetBuffer函数作用
CString::GetBuffer
LPTSTR GetBuffer( int nMinBufLength );
throw( CMemoryException );
对一个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中,我们之后可以对其操作
}
还有的例子是使用sendmessage(WM_COPYDATA)进程间通信的时候,发送数据的地址最好getbuffer一下防止被未知线程修改数据
---------------------
作者:H-KING
来源:CSDN
原文:https://blog.csdn.net/liujiayu2/article/details/39968265
版权声明:本文为博主原创文章,转载请附上博文链接!
CString::GetBuffer函数作用相关推荐
- CString的GetBuffer()主要作用是将字符串的缓冲区长度锁定,releaseBuffer则是解除锁定
CString str; CStringArray array; GetPrivateProfileString(_T("策略参数"), _T("ROI1"), ...
- CString:Getbuffer和Releasebuffer的作用
首先看MSDN中的解释: CString::GetBuffer LPTSTR GetBuffer( int nMinBufLength ); throw( CMemoryException ) ...
- Cstring GetBuffer 和 ReleaseBuffer
GetBuffer()主要作用是将字符串的缓冲区长度锁定,releaseBuffer则是解除锁定,使得CString对象在以后的代码中继续可以实现长度自适应增长的功能. CString ::GetBu ...
- MFC CString GetBuffer ReleaseBuffer方法
一.函数原型 CString::GetBuffer LPTSTR GetBuffer( int nMinBufLength ); throw( CMemoryException ); Return V ...
- fullfile函数作用
fullfile函数作用是利用文件各部分信息创建并合成完整文件名. 用法: fullfile('dir1', 'dir2', ..., 'filename') f = fullfile('dir1', ...
- 说明exit()函数作用的程序
// algo1-4.cpp 说明exit()函数作用的程序 #include"c1.h" int a(int i) { if(i==1) { printf("退出程序的 ...
- API各函数作用简介
API各函数作用简介 1.控件与消息函数 AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小 AnyPopup 判断屏幕上是否存在任何弹出式窗口 Arrang ...
- 在标准IO库中,rewind函数作用?
在标准IO库中,rewind函数作用? 将文件内部的位置指针重新指向一个流(数据流/文件)的开头 一个完整的信号生命周期包含4个重要的事件,这4个重要事件分别是? 信号诞生:信号在进程中注册完毕:信号 ...
- java中flush函数作用_Java语言中flush()函数作用及使用方法详解
最近在学习io流,发现每次都会出现flush()函数,查了一下其作用,起作用主要如下 //------–flush()的作用--------– 笼统且错误的回答: 缓冲区中的数据保存直到缓冲区满后才写 ...
最新文章
- hadoop 安全模式
- c/c++文件I/O函数学习--不断补充
- hdu5007 小水题
- uc浏览器为什么安装在c盘_你肯定不知道为什么Windows上面的软件都想把自己安装在C盘...
- 大剑无锋之ArrayList中使用增强for循环能删除元素吗?【面试推荐】
- Pytorch torchvision完成Faster-rcnn目标检测demo及源码详解
- update 没有索引导致业务崩了,老板骂了一个小时
- 专技天下河北省2016年专业技术人员继续教育公需科目题库答案(答题器)
- [大数据之Sqoop] —— 什么是Sqoop?
- YV12数据与AVFrame的相互转换
- paip.提高稳定性---自动检测sleep mysql数据库死连接以及kill
- 饼状统计图php,制作圆饼统计图
- 虚拟机启动失败-Intel VT-x 处于禁用状态 的解决方案
- kernel网络之RSS,RPS,RFS和XPS
- python简单操作excel
- android入门小Demo
- java txt文件追加_java如何追加写入txt文件
- 职场六大困惑,处理不好每一个都很扎心
- Hive 分区表 分桶表
- 戴尔 成铭3980台式计算机,戴尔成铭3980商用台式机评测 高颜值高性能