Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Вниз

динамический Buffer   Найти похожие ветки 

 
Alexis   (2004-02-29 12:10) [0]

допустим, объявляя в
var buffer:array[0..200] of char;
создаем довольно большой буфер для принятия значения при вызове какой-либо функции, например
GetWindowsVersion(buffer);
strpas(buffer);

Однако может возникнуть переполнение.Каким образом можно создавать буфер динамической длины, а затем обрабатывать его.
Заранее благодарю.


 
Плохиш   (2004-02-29 12:18) [1]

GetMem напрмер


 
Maxud   (2004-02-29 12:19) [2]

buffer: array of Char;
...
SetLength(Buffer, 200);
buffer[4] := "F";


 
Anatoly Podgoretsky   (2004-02-29 12:20) [3]

Такой функции нет
var buffer: array of char;


 
Alexis   (2004-02-29 12:35) [4]


> Такой функции нет

Я понимаю что нет.По-моему в этой ситуации надо указатели использовать?


> SetLength(Buffer, 200);

Вопрос внимательно почитайте :)


 
Defunct   (2004-02-29 13:50) [5]

Alexis © (29.02.04 12:35) [4]
>> SetLength(Buffer, 200);

> Вопрос внимательно почитайте :)

А что не так?
Вы же можете написать, SetLength(Buffer, NewSize); где NewSize - переменная с требуемым значением.


 
Alexis   (2004-02-29 14:25) [6]


> А что не так?
> Вы же можете написать, SetLength(Buffer, NewSize); где NewSize
> - переменная с требуемым значением.

K primeru, ja citaju iz reestra znacenije funkcijej, kotoroja peredaet znacenije v buffer.Ja ved zaranee ne znaju kakoj dliny budet znacenije.


 
Romkin   (2004-02-29 14:26) [7]

Строку использовать. Что все уперлись в массив?
Кстати, что за функция GetwindowsVersion? Что-то я такой не знаю.
Как правило, функции API возвращают длину буфера. Или есть парная, например, GetWindowText и GetWindowTextLength. Использование простое:

var
S: string;
Len: integer;

Len := GetWindowTextLength(Handle);
if Len = 0 then
raiseLastOSError;
SetLength(S, Len);
if GetWindowText(Handle, PChar(S), Len) = 0 then
raiseLastOSError;

//и тд...


 
Verg   (2004-02-29 14:31) [8]

Практически все подобного сорта функции умеют сообщать, что размер заданного буфера недостаточен. Мало, того, большинство при этом сообщают "сколько надо".
Либо работают с известными максимальными значениям размеров.

Так что, как говорится, с больной головы на здоровую.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.014 c
1-43458
Rosik
2004-03-01 00:36
2004.03.14
TWebBrowser


6-43740
Pohil
2004-01-04 22:18
2004.03.14
Как мне определить все забитые IP в сети


1-43500
Vilux
2004-02-18 16:30
2004.03.14
Как узнать, что программа будет закрыта, если нет формы


1-43600
Guest
2004-01-23 13:33
2004.03.14
Высота итемов в TTreeView


1-43648
Marina_S
2004-03-03 23:43
2004.03.14
Как засечь время?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский