请输入您要查询的百科知识:

 

词条 GetBufferSetLength
释义

GetBufferSetLength概述

声明

LPTSTRGetBufferSetLength(int nNewLength);

throw(CMemoryException);

说明

申请一个指定长度的空间

返回值

(原文)An LPTSTRpointer to the object’s (null-terminated) character buffer

返回生成的指定长度的空间指针

参数表

参数:int型 nNewLength :

(原文)The exact size of the CString character buffer in characters

指明了长度大小

注解

1、GetBufferSetLength 分配新的内存,同时将nNewLength的值设置为参数中指定的值。

2、它申请一个指定长度的空间, 即使里面最终保存的字符串长度小于申请的空间长度, 也不会将多余空间释放。

3、改变缓冲区的大小,会将字符串的长度设置为缓冲区的大小。

例子

例一:

CString csStr;

LPTSTR lpsz = csStr.GetBufferSetLength(100);

lpsz[0] = 'a';

lpsz[1] = 'b';

lpsz[2] = '\\0';

int nLength = csStr.GetLength();

/* n的值还是为100 */

例二:

GetBufferSetLength(20);

truncating or growing its length if necessary to exactly match the length,这里是20。

根据你指定的长度来动态的扩展或者缩减20, 所以小于20的串长度是20,一旦缓冲区被release了,自然就享受不到这种动态扩展功能的了,所以最后面就变成实际的3了比较 GetBuffer和ReleaseBuffer、GetBufferSetLength CString类的这几个函数

GetBuffer和ReleaseBuffer是一套需要配合使用的函数, 与GetBufferSetLength相比, 优点是如果分配的空间大于实际保存的字符串(0结尾), ReleaseBuffer会把多余申请的空间释放, 归还给系统; 但使用时需要注意以下问题: 如果要保存的字符串为abc(0结尾), 则GetBuffer参数应至少为3; 如果要保存的内容不是以0结尾, 比如是读取文件数据, 则GetBuffer参数如果大于文件长度时, ReleaseBuffer参数一定要为文件长度(如果GetBuffer参数为文件长度的话不存在问题, ReleaseBuffer参数可以为默认-1)!

CString csStr;LPTSTR lpsz = csStr.GetBuffer(100);lpsz[0] = 'a';lpsz[1] = 'b';lpsz[2] = '\\0';csStr.ReleaseBuffer();int nLength = csStr.GetLength();/* n的值为2 */

GetBufferSetLength相对比较容易理解, 它申请一个指定长度的空间, 即使里面最终保存的字符串长度小于申请的空间长度, 也不会将多余空间释放.

CString csStr;LPTSTR lpsz = csStr.GetBufferSetLength(100);lpsz[0] = 'a';lpsz[1] = 'b';lpsz[2] = '\\0';int nLength = csStr.GetLength();/* n的值还是为100 */

参考资料

1、《MSDN》

2、零起点学通C++视频教程

3、书库亚洲(shuku asia)编程频道

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/27 1:00:23