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