指针问题(100分)

  • 主题发起人 主题发起人 qiangyao
  • 开始时间 开始时间
Q

qiangyao

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(!]
这是我读取文件,但是返回的BUFFER为' '
procedure TForm1.Button1Click(Sender: TObject);
var
; iFileHandle: integer;
; iFileLength: integer;
; iBytesRead: integer;
; Buffer: PChar;
; i: longInt;
begin

; if OpenDialog1.Execute then
; begin
; ; try
; ; ; iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
; ; ; iFileLength := FileSeek(iFileHandle,0,2);
; ; ; FileSeek(iFileHandle,0,0);


; ; ; Buffer := PChar(AllocMem(iFileLength + 1));
; ; ; iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);
; ; ; FileClose(iFileHandle);

; ; ; for i := 0 to iBytesRead-1 do
; ; ; begin
; ; ; ; StringGrid1.RowCount := StringGrid1.RowCount + 1;
; ; ; ; StringGrid1.Cells[1,i+1] := Buffer;
; ; ; ; StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer));
; ; ; end;
; ; finally
; ; ; FreeMem(Buffer);
; ; end;
; end;
end;

.
 
把 ; ; ;iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);
改为 ;(Buffer后面加^)
; ; ; iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);

感觉这是编译器的一个Bug——Buffer是指针,其指向的内容才应该是字符串
实际存储地址,可是编译出来的代码在Call FileRead时竟然把Buffer变量本
身的地址当作了存储地址。
 
你的代码就是Delphi 自带的help 里面的吧? 呵呵。
可以把这个臭虫报告给Borland了
 
cheka 你好
该文件其实是一个记录顺序文件,我想知道的记录的开始和结束,算出字节大小
,然后根据记录长度读取记录,我现在想知道的是,怎样按照字节读文件,并判断
ASCII码值。
 
后退
顶部