博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CString::GetBuffer函数作用
阅读量:3659 次
发布时间:2019-05-21

本文共 1116 字,大约阅读时间需要 3 分钟。

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 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的文章
Springboot中对mvc进行扩展
查看>>
一文读懂HashMap
查看>>
ConcurrentModifcationException详解
查看>>
史上最全的PHP正则表达式
查看>>
理解Mysql prepare预处理语句
查看>>
预编译语句(Prepared Statements)介绍,以MySQL为例
查看>>
单利模式
查看>>
gdal学习笔记1-读取数据信息
查看>>
python关于print中数据传输的用法
查看>>
sublime text3的快捷键总结
查看>>
gdal学习笔记2-数据读写
查看>>
python中动态生成变量名及赋值
查看>>
python识别数据结构
查看>>
python bisect序列二分法详解
查看>>
python学习笔记字典排序,
查看>>
python内置类 set
查看>>
python getatrra()
查看>>
thinkpython2的扑克牌系列练习最终解读
查看>>
matlab复色光夫琅禾费衍射
查看>>
Java中线程的基本操作以及Thread和Runnable两种实现的比较
查看>>