Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

почему изменяется буфер у процедуры blockwrite [D7, WinXP]


Страницы:   1 2

depresnjak ©   (2004-07-13 08:19:00) 

я использую процедуру blockwrite, после записи переменная буфера, типа pchar увеличивается на 3 байта, с чем это может быть связано?


Sha   (2004-07-13 16:06:00) [1]

...переслать


Digitman   (2004-07-13 14:55:00) [2]


> depresnjak   (13.07.04 14:47) [35]


угу .. будто бы сам догадаться не мог, что миинимизация геморроя при работе со строкой - это использование типа String, а при первой же трэбе привести адрес буфера, на который ссылается переменная типа String - сущий пустяк .. как два байта обоxxxxx


depresnjak   (2004-07-13 14:47:00) [3]

>Digitman
Спасибо за string, приведённый при записи к Pchar


ASMiD   (2004-07-13 14:45:00) [4]

Если копать куда уходят мозги машины при неправильной работе с памятью - может жизни не хватить


Digitman   (2004-07-13 14:42:00) [5]


> depresnjak   (13.07.04 14:39) [29]


не занимайся ерундой с PChar, не надо оно тебе для этого случая

var
s: String;
..
setlength(s, n);
for j:=1 to n do
 s[j]:=chr(random(30)+190);

BlockWrite(f, PChar(s) ^, n, BytesWritten);


Тимохов   (2004-07-13 14:42:00) [6]


> Потмоу, что так нули ложаться.

скорее карты :)))
Это магия лажи


Тимохов   (2004-07-13 14:40:00) [7]


> вы правы, но уменя вопрос в другом, почему он изменяется
> на одинаковое количество байт?

это вас не должно волновать, т.к. из ложного утверждения можно получить любое утверждение, в том числе и ложное. Т.е. зачем копать навоз ошибки?


Reindeer Moss Eater   (2004-07-13 14:40:00) [8]

почему он изменяется на одинаковое количество байт?

Потмоу, что так нули ложаться.


depresnjak   (2004-07-13 14:39:00) [9]

>Reindeer Moss Eater
вы правы, но уменя вопрос в другом, почему он изменяется на одинаковое количество байт?
И ещё, я несколько раз вызываю length и перед blockwrite он даёт правильный результат


Digitman   (2004-07-13 14:36:00) [10]


> depresnjak   (13.07.04 08:19)  



> переменная буфера, типа pchar увеличивается на 3 байта


чушь.
переменная типа PChar не увеличивается ни на 3 байта, ни на 30  .. как была она 4 байта, так и осталась

а вот Length(s) подсчитает число символов в буфере , адрес которого хранится в 4-байтной переменной s, исключая первый встреченный при сканировании буфера символ-терминатор

кстати, что за блажь - использовать length() для PChar ? чем string-то не угодил ?
да еще Zeromemory зачем-то приплел ..

следующий код позволяет не заботиться ни о каких символах-терминаторах

var
 s: String;
..
 setlength(s, n);
 for j:=1 to n do
  s[j]:=chr(random(30)+190);


ASMiD   (2004-07-13 14:36:00) [11]

Любые. Главное с размерностью работать корректно.


Reindeer Moss Eater   (2004-07-13 14:35:00) [12]

А зачем вообще мерять длину чего-то если под это чего-то выделена память и зармер её мы знаем заранее?


depresnjak   (2004-07-13 14:35:00) [13]

И ещё, интересно почему когда я выделял разное количество байт под буфер, после blockwrite он увеличивался на 3 байта??


ASMiD   (2004-07-13 14:35:00) [14]


> showmessage(inttostr(x));{10240}
> BlockWrite(f,s^,x,writedata);

В этот момент и происходит изменение информации, и 0 появляется в другом месте и из примера не видно чему равно n 10240 или где?


depresnjak   (2004-07-13 14:33:00) [15]

ММдаа, дублёж


depresnjak   (2004-07-13 14:32:00) [16]

Удалено модератором


depresnjak   (2004-07-13 14:32:00) [17]

Тогда какие типы лучше использовать для буфера?


Reindeer Moss Eater   (2004-07-13 14:31:00) [18]

Так ведь и родная для PChar StrLen покажет длину до первого нуля.


Тимохов   (2004-07-13 14:29:00) [19]


> length работает замечательно

не может замечательно работать.

при преобразовании pchar в string в качетве длинны берется длина до символа 0, а он у вас каждый раз в разном месте, т.к. расположен где-то далеко вне строки :)).


depresnjak   (2004-07-13 14:27:00) [20]

length работает замечательно
сравнил результаты
всё ok

>Тимохов
как это - сначало в одном, потом в другом?
Тогда почему первый раз length хорошо работает?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо