releasebuffer使用
来源:互联网 发布:ios7越狱软件源 编辑:程序博客网 时间:2024/06/05 00:17
转自:http://www.cnblogs.com/zhuyf87/archive/2012/11/02/2751011.html
GetBuffer和ReleaseBuffer是从其父类CSimpleStringT继承过来的。GetBuffer的作用是:“Returns a pointer to the internal character buffer”,ReleaseBuffer的作用是:“Releases control of the buffer allocated by GetBuffer.”。这两个函数的常见用法如下:
CString str;const int bufferSize = 10;LPTSTR p = str.GetBuffer(bufferSize);_tcscpy_s(p, bufferSize, _T("abcd1234.")); // use the buffer directlystr.ReleaseBuffer(); // Surplus(多余的) memory released, p is now invalid.
给GetBuffer函数传递的参数bufferSize,意思是:“The minimum size of the character buffer in characters. This value does not include space for a null terminator.”。对于调用ReleaseBuffer释放内存时,是否应该带参数,msdn是这样说的:“If you keep track of the string length yourself, you should not append the terminating null character. You must, however, specify the final string length when you release the buffer with ReleaseBuffer. If you do append a terminating null character, you should pass –1 (the default) for the length to ReleaseBuffer, and ReleaseBuffer will perform a strlen on the buffer to determine its length.”。因为ReleaseBuffer函数的默认参数是-1,所以通常在调用ReleaseBuffer函数时省去-1参数的书写。
还有一点非常重要,看如下示例程序:
CString str;const int bufferSize = 10;LPTSTR p = str.GetBuffer(bufferSize);_tcscpy_s(p, bufferSize, _T("abcd")); // use the buffer directlystr.Append(_T("1234"));str.ReleaseBuffer(); // Surplus(多余的) memory released, p is now invalid.
当程序执行完Append函数之后,程序员期望的是str字符串里保存的字符序列是abcd1234,但实际上并不是这样。有可能str的内容仍然为abcd,或者直接变为1234。这个问题在我之前的项目中曾经遇到过,最后才把问题定位到这里,来看msdn的注释:“If you use the pointer returned by GetBuffer to change the string contents, you must call ReleaseBuffer before using any other CSimpleStringT member methods.”。也就是说如果程序中通过GetBuffer 函数返回的字符指针修改了字符串的内容,那么必须在使用任何其他的CString类成员函数之前先调用ReleaseBuffer。
- releasebuffer使用
- GetBuffer()与ReleaseBuffer()使用
- ReleaseBuffer
- ReleaseBuffer()
- 使用GetBuffer之后一定要ReleaseBuffer?
- CString之GetBuffer/ReleaseBuffer的使用
- CString GetBuffer() 与releasebuffer()的使用
- 使用ReleaseBuffer()后,CString类变量数据清空
- GetBuffer ReleaseBuffer
- CString中使用GetBufferSetLength和GetBuffer后执行releasebuffer的原理及必要性
- CString GetBuffer() and ReleaseBuffer()
- GetBuffer and ReleaseBuffer体会
- 分析: GetBuffer, ReleaseBuffer, GetBufferSetLength
- CString GetBuffer() and ReleaseBuffer()
- Getbuffer ReleaseBuffer Cstring
- 分析: GetBuffer, ReleaseBuffer, GetBufferSetLength
- GetBuffer, ReleaseBuffer, GetBufferSetLength
- GetBuffer, ReleaseBuffer, GetBufferSetLength(转)
- 访问者(Visitor Pattern)
- MongoDB安装指南(windows环境下)
- mssql手工注入
- 扫描线 n个立方体相交区域大于等于三次的体积和 hdu3642 Get The Treasury
- Local & Global
- releasebuffer使用
- 快速排序
- Facebook Stetho应用
- 初识JVM
- 第二阶段学习计划
- 中国大学MOOC-陈越、何钦铭-数据结构 堆中的路径
- kmp算法的next数组讲解
- C# 中String和string的区别
- c# 程序后台运行