Форум: "Основная";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.009 c