Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

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



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS