CString::GetBuffer

Этот метод возвращает указатель на внутренний символьный буфер объекта 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

 

См. Также

CString::GetBufferSetLength, CString::ReleaseBuffer