procedure TForm1.Button1Click(Sender: TObject);
var
arr:array of Char;
Str:String;
M_Stream:TFileStream;
begin
M_Stream:=TFileStream.Create('e:\aa.txt',fmOpenReadWrite);
Str:='Qiugaoqi';
SetLength(arr,Length(Str));
M_Stream.Seek(M_Stream.Size,0);
M_Stream.Write(arr,Length(Str));
M_Stream.Free;
end;为什么这个写出来的是乱码呢?用静态数组就可以呢?
什么是Buff的概念呢?

解决方案 »

  1.   

    procedure   TForm1.Button1Click(Sender:   TObject); 
    var 
    arr:array   of   Char; 
    Str:String; 
    M_Stream:TFileStream; 
    begin 
    M_Stream:=TFileStream.Create('e:\aa.txt',fmOpenReadWrite); 
    Str:='Qiugaoqi'; 
    SetLength(arr,Length(Str)); 
    M_Stream.Seek(M_Stream.Size,0); 
    //M_Stream.Write(arr,Length(Str)); //Write的第一个参数是内存的首地址,而动态数组是一个指针
    M_Stream.Write(arr^,Length(Str)); 
    M_Stream.Free; 
    end; 
      

  2.   

    Delphi里面的无类型参数都需要传入实际地址e.g. 
    procedure Test(const buffer; var target);
      

  3.   

    SetLength(arr,Length(Str)+1);
    最好将字符串结束符#0的长度加上 
      

  4.   

    SetLength(arr,Length(Str)+1); 
    最好将字符串结束符#0的长度加上 
    ===========
    这个并不是必要的,有时候相当于画蛇添足(有过惨痛经历^_^)。