![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите разобраться с pchar [D5, XP]
DesperadO666 © (2006-05-16 16:48:00)Такая незадача....
Вот кусок кода,
где f : file
FindBlock(StartBlock) - процедура определяющая глобальные переменные
StartBlock и EndBlock
procedure TForm1.Button1Click(Sender: TObject);
var
pbuf2:pchar;
begin
FindBlock(StartBlock);
pbuf2:=nil;
GetMem(pbuf2,(EndBlock-StartBlock));
ShowMessage('strlen(pbuf2) - '+inttostr(strlen(pbuf2)));
seek(f,StartBlock);
BlockRead(f,pBuf2^,(EndBlock-StartBlock));
memo2.Clear;
memo2.Lines.Add(string(pBuf2));
Freemem(pbuf2);
end;
При первом заходе в процедуру
ShowMessage говорит что размер pbuf2=0, а при последующих то 2 то 3 то 0... И После считывания (EndBlock-StartBlock) байт у меня получается чуть больше, на величину какого-то 'мусора' в pbuf2
DesperadO666 (2006-05-16 19:24:00) [1]MetalFan MBo
Спасибо.
MBo (2006-05-16 18:46:00) [2]>MetalFan
Нет, автору. Твоего поста еще не видел, когда писал.
MetalFan (2006-05-16 18:22:00) [3]
> А как, по-твоему, работает strlen?
> Эта функция просто ищет #0, а GetMem не обязана заполнять
> нулями буфер, так что там может быть мусор.
если это мне, то я как раз и имел ввиду то, что в выделеной памяти может находиться мусор, и strLen соотв. работать нормально не будет...
MetalFan (2006-05-16 17:35:00) [4]а ты уверен, что выделенная память не содержит мусора?!
сделай после GetMem
ZeroMemory
посмотри, как strLen работает ;)
MBo (2006-05-16 17:35:00) [5]А как, по-твоему, работает strlen?
Эта функция просто ищет #0, а GetMem не обязана заполнять нулями буфер, так что там может быть мусор.
DesperadO666 (2006-05-16 17:10:00) [6]По-моему 0, если еще не выполнилась строчка
BlockRead(f,pBuf2^,(EndBlock-StartBlock));
Сергей М. (2006-05-16 16:51:00) [7]
> ShowMessage говорит что размер pbuf2=0, а при последующих
> то 2 то 3 то 0.
А сколько доллжнго "говорить" по-твоему ?