1.GetBuffer函数说明 如果nMinBufLength(最小占用长度) 比当前buffer长度大,那么就调用GetBuffer函数去释放当前的Buffer,用一个被请求的大小去覆盖这个buffer并且重新设定计数器为0,如果在这之前你在这个buffer中调用了LockBuffer,那么你将失去你当前锁定的buffer。 注意事项:如果你使用这个指向由GetBuffer所改变返回的字符串内容,那么在你使用CString其他CString方法之前你必须调用ReleaseBuffer 在调用ReleaseBuffer函数之后GetBuffer中的内容将无效(也就是销毁) 当这个CString被销毁的时候,这个buffer所占用的内存将被自动释放 注意这个: 如果你知道了这个字符串的长度,你不可以直接添加NULL字符了事,当你使用ReleaseBuffer的时候,无论如何,你必须指定最后的字符串的长度,如果你仅仅添加了一个NULL字符结束符给这个字符串,你应该给ReleaseBuffer传递一个-1, 当这个函数结束的时候,_tcslen 将决定这个buffer的长度 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 );//定义一个指针指向LPTSTR并接受GetBuffer所返回的地址 lstrcpy( p, _T("Hello") ); // directly access CString buffer//使用Istrcpy将Hello]复制到该buffer中 s.ReleaseBuffer( );//释放buffer #ifdef _DEBUG afxDump << "CString s " << s << "\n";这时候s="Hello"; #endif |
|