Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.12;
Скачать: CL | DM;

Вниз

GetMem, FillChar   Найти похожие ветки 

 
Ил_204   (2003-12-02 11:22) [0]

Дайте пример, а то я торможу.
Надо для a:PChar выделить память GetMem и заполнить ее FillChar символом #0.


 
Тимохов   (2003-12-02 11:26) [1]

Ну это же просто:
1. Выделаешь память GetMem"ом
2. Заполянешь ее нулями с помощью FillChar


 
default ©   (2003-12-02 11:27) [2]

сникерсни
PS хелп читай


 
Юрий Зотов ©   (2003-12-02 11:28) [3]

GetMem(A, длина);
try
ZeroMemory(A, длина);
...
finally
FreeMem(A)
end;


 
default ©   (2003-12-02 11:31) [4]

function AllocMem(Size: Cardinal): Pointer;
из хелпа: "AllocMem allocates a block of the given size on the heap. Each byte in the allocated buffer is set to zero."


 
Ил_204   (2003-12-02 11:37) [5]

Господа, про хелп я знаю. Я пример хочу. Именно с GetMem и FillChar.


 
Плохиш_   (2003-12-02 11:39) [6]

>Ил_204 (02.12.03 11:37) [5]

А чем примеры из хелпа не угодили?


 
Ил_204   (2003-12-02 11:39) [7]

2Юрий Зотов:
Как для PChar определить длину. SizeOf - размер указателя, а Length стреляется.


 
Ил_204   (2003-12-02 11:40) [8]

2Плохиш_:
Хочется пример работающего кода!


 
Ломброзо ©   (2003-12-02 11:43) [9]

Нет смысла заполнять область для PChar нулями. Для того, чтобы строка была нулевой длины, достаточно установить в нуль нулевой байт.


 
Anatoly Podgoretsky ©   (2003-12-02 11:43) [10]

Примеры в справке рабочии!
Определять длину не нужно, поскольку ты ее обязан задать в GetMem


 
Ил_204   (2003-12-02 11:45) [11]

2Ломброзо: Да, символ #0 выбран несколько неудачно.
Как заполнить (FillChar) a символом Chr("x")?


 
Anatoly Podgoretsky ©   (2003-12-02 11:46) [12]

Ord("x")


 
Ил_204   (2003-12-02 11:47) [13]

2Anatoly Podgoretsky:
:-))


 
Anatoly Podgoretsky ©   (2003-12-02 11:47) [14]

Сообственно это самое и в примере, только для пробела, неужели трудно пробел заменить на другой символ?


 
Ил_204   (2003-12-02 11:49) [15]

Ладно, может действительно торможу.
Как узнать размер PChar?


 
Плохиш_   (2003-12-02 11:49) [16]

>Anatoly Podgoretsky © (02.12.03 11:47) [14]

:-) Ну чего Вы прикалываетесь? ;-)


 
Плохиш_   (2003-12-02 11:50) [17]

>Ил_204 (02.12.03 11:49) [15]

У PChar есть 2 размера.
Вам какой?


 
Семен Сорокин ©   (2003-12-02 11:50) [18]

размер PChar = максимально количество символов которое твоя строка займет в памяти :))


 
Тимохов   (2003-12-02 11:51) [19]

Почитай ты раздел хелпа
object pascal reference\data types ...\strings

Там много чего интересного


 
Ил_204   (2003-12-02 11:51) [20]

2Плохиш_: Как интересно! ;)


 
Плохиш_   (2003-12-02 11:53) [21]

>Ил_204 (02.12.03 11:51) [20]

Что?

>Тимохов (02.12.03 11:51) [19]

Бо блин, а я думал, что мы уже в "Потрепаться" ;-)


 
Ил_204   (2003-12-02 11:55) [22]

2Плохиш_: Имеешь в виду c #0 и без него?


 
Юрий Зотов ©   (2003-12-02 11:55) [23]

> Ил_204 (02.12.03 11:39) [7]

Ее надо задать, а не определять. Например, если указать 1024, то под будущую строку отводится 1 Кб памяти. Это значит, что любая строка, которая потом будет в ней размещаться, не имеет права быть длиннее 1023-х символов (последний, 1024-й будет хранить завершающий ноль). Но никто не запрещает этой строке быть короче 1023-х символов.

Вы поймите главное: фактическая длина строки и резервируемая под нее память - вещи совершенно разные. Память - сколько мы сами (или компилятор) выделили, столько и будет (и ровно столько же надо потом освоболить). Память - это максимально возможная длина. А фактическая длина всегда определяется по первому встреченному в строке символу #0. Условие тут лишь одно - длина никогда не должна превышать память, вот и все.


 
Тимохов   (2003-12-02 11:55) [24]

2Плохиш_
Скоро, чую, там будем


 
Юрий Федоров ©   (2003-12-02 11:55) [25]

>Ил_204
function StrLen(const Str: PChar): Cardinal;
Returns number of characters in a string excluding the null terminator.


 
Ил_204   (2003-12-02 11:56) [26]

2Юрий Зотов:
чтобы получить фактическую длину я должен "прокрутить" цикл до #0 или есть библиотечные ф-ции?


 
Юрий Зотов ©   (2003-12-02 12:00) [27]

> Ил_204 (02.12.03 11:56) [26]

См. [25]. Еще вариант:

var
P: PChar;
Len: integer;
...

if P = nil then Len := 0 else Len = Length(String(P));


 
Ил_204   (2003-12-02 12:04) [28]

GetMem(a, ASIZE + 1);
FillChar(a, ASIZE, Ord("x"));
a[ASIZE] := #0;
ShowMessage(IntToStr(StrLen(a)));

Пример стреляется, в чем может быть проблема?


 
Тимохов   (2003-12-02 12:09) [29]

Почитай внимательнее о fillchar.
Ошибка в этой строке...это точно, проверил


 
Reindeer Moss Eater ©   (2003-12-02 12:11) [30]

StrLen отменили?


 
Ил_204   (2003-12-02 12:12) [31]

2Тимохов: Спасибо!
Надо вот так:
GetMem(a, READ_BUFFER_SIZE + 1);
FillChar(a^, READ_BUFFER_SIZE, Ord("x"));
a[READ_BUFFER_SIZE] := #0;
ShowMessage(IntToStr(StrLen(a)));


 
Тимохов   (2003-12-02 12:13) [32]

ну типа того...


 
Ил_204   (2003-12-02 12:14) [33]

Спасибо всем - разобрался!

2Плохиш_: С вопросом про 2 размера подколол ;)


 
Плохиш_   (2003-12-02 12:32) [34]

>Ил_204 (02.12.03 12:14) [33]

Тебе же Юрий Зотов всё расказал.



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

Текущий архив: 2003.12.12;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.017 c
1-36698
Murad
2003-12-02 12:03
2003.12.12
Размер пикселя на печати


14-36836
Igor_thief
2003-11-14 16:30
2003.12.12
Курсовой


1-36615
bobtubob
2003-12-01 09:20
2003.12.12
Как передать переменные из программы в программу


4-36883
Ascan_
2003-10-21 17:36
2003.12.12
Пункт меню Help справо, а не в одном ряду с остальными


6-36778
Fredericco
2003-10-15 19:10
2003.12.12
Кушается память при отправке большой порции данных.