Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-36548
Stepa
2003-11-19 20:21
2003.12.12
проблемы с ADOQuery+SQL


1-36620
qwe
2003-11-21 16:53
2003.12.12
Invalid Class Typecast


14-36810
Хрюначок
2003-11-19 16:12
2003.12.12
Копирование


3-36549
Pako
2003-11-20 10:04
2003.12.12
Query


1-36656
Agent13
2003-11-30 19:27
2003.12.12
Регистрация почтового клиента





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский