ReleaseBuffer函数是用来告诉 CString对象,你的GetBuffer所引用的内存已经使用完毕,现在必须对它进行封口,否则CString将不会知道它现在所包含的字符串的长 度,所以在使用完GetBuffer之后,必须立即调用ReleaseBuffer函数重置CString的内部属性,其实也就是头部信息。 GetBuffer 的第一种用法,也是最简单的一种,不用给它传递参数,...
GetBuffer(0):意思是将字符串对象原样返回指针,不改变大小 2.使用例子 例子: // example for CString::GetBuffer CString s( "abcd" );//定义一个CString s并且初始化为abcd #ifdef _DEBUG afxDump << "CString s " << s << "\n"; #endif LPTSTR p = s.GetBuffer( 10 );//定义一个指针指向LPTST...
也就是说,对GetBuffer返回的字符串指针,我们将它做为参数传递给strcpy,试图来修改这个字符串指针指向的地址,结果是修改成功,并且CString对象str1的值也响应的变成了” modified”。但是,我们接着再调用str1.GetLength()时却意外的发现其返回值仍然是20,但是实际上此时str1中的字符串已经变成了” modified”,也就是说...
1. GetBuffer 很多错误用法中最典型的一个就是CString:: GetBuffer ()了.查了MSDN,里面对这个operation的描述是: Returns a pointer to the internal character buffer for the CString object. The returned LPTSTR is not const and thus allows direct modification of CString contents。 这段很清楚的说明,对于...
2、GetBuffer函数与GetbufferSetLength中的参数如果大于字符串的实际长度,则自动开辟新增加的长度。当调用ReleaseBuf函数后,则新增加的缓冲区如果未被存放内容那么多于的内存就会被释放。如果参数小于字符串的实际长度,并且大于等于0,则利用返回的指针访问不会发生异常,并且如果未做任何修改操作,那么当调用ReleaseBuf函数后...
CString::GetBuffer LPTSTR GetBuffer(int nMinBufLength );throw(CMemoryException );返回值:一个指向对象的(以空字符结尾的)字符缓冲区的LPTSTR指针。参数:nMinBufLength 字符缓冲区的以字符数表示的最小容量。这个值不包括一个结尾的空字符的空间。说明:此成员函数返回一个指向CString对象的内部字符...
这是GetBuffer 的第一种用法,也是最简单的一种,不用给它传递参数,它使用默认值 0,意思是:“给我这个字符串的指针,我保证不加长它”。当你调用 ReleaseBuffer 时,字符串的实际长度会被重新计算,然后存入 CString 对象中。 必须强调一点,在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲...
这是GetBuffer 的第一种用法,也是最简单的一种,不用给它传递参数,它使用默认值 0,意思是:“给我这个字符串的指针,我保证不加长它”。当你调用 ReleaseBuffer 时,字符串的实际长度会被重新计算,然后存入 CString 对象中。 必须强调一点,在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲...
1.GetBuffer函数说明 这个函数是为一个CString对象重新获取其内部字符缓冲区的指针,返回的LPTSTR为非const的,从而允许直接修改CString中的内容。 如果nMinBufLength(最小占用长度) 比当前buffer长度大,那么就调用GetBuffer函数去释放当前的Buffer,用一个被请求的大小去覆盖这个buffer并且重新设定计数器为0,如果在这之前你...
char*p=strTest.GetBuffer(0); inti=atoi(p); strTest.ReleaseBuffer(); 这种用法当然没有错,但是我认为这里的GetBuffer/ReleaseBuffer是没有必要的,为什么呢?因为 int __cdecl atoi(const char *)的参数是const char*,CString的内部数据肯定不会被修改的. ...