Этот метод возвращает указатель на внутренний символьный буфер объекта CString. Возвращенный LPTSTR - неконстанта и таким образом позволяет прямую модификацию содержания CString.
LPTSTR GetBuffer(
int nMinBufLength );
nMinBufLength
Определяет минимальный размер символьного буфера в символах. Это значение не включает признака конца строки.
Если nMinBufLength больше чем длина текущего буфера, запрос к GetBuffer уничтожит текущий буфер. Замените его буфером требуемого размера, и сбросьте reference count к нулю. Если Вы предварительно вызвали LockBuffer для этого буфера, Вы можете потерять блокировку буфера.
Указатель LPTSTR на символьный буфер объекта с нулевым символом в конце.
Если Вы используете указатель, возвращенный GetBuffer, чтобы изменить содержание строки , Вы должны назвать вызвать ReleaseBuffer перед использованием любых других CString методов.
Адрес, возвращенный GetBuffer может не быть правилен после запроса к ReleaseBuffer, так как дополнительные операции CString могут заставить буфер CString перераспределиться. Буфер не будет перераспределен, если Вы не изменяете длину CString.
Буферная память будет освобождена автоматически, когда объект CString будет разрушен.
Обратите внимание, что, если Вы следите за длиной строки самостоятельно, Вы не должны добавлять в конец нуль-терминатор. Вы должны, однако, определить конечную строковую длину, когда Вы выпускаете буфер с помощью ReleaseBuffer. Если Вы действительно добавляете в конец закончившийся нулевой символ, Вы должны передать длину-1 в ReleaseBuffer, который выполнит функцию tcslen для буфера, чтобы определить его длину.
Следующий пример демонстрирует использование CString::GetBuffer.
// Пример для CString::GetBuffer
CString s( "abcd" );
#ifdef _DEBUG
afxDump << "CString s " << s << "\n";
#endif
LPTSTR p = s.GetBuffer( 10 );
lstrcpy( p, _T("Hello") ); // непосредственно обращаются к буферу CString
s. ReleaseBuffer ();
#ifdef _DEBUG
afxDump << "CString s " << s << "\n";
#endif