var
  DataBuff:Pchar
begin
GetMem(DataBuff,BuffSize*2);
//...获取DataBuff值
DataStr:=Trim(DataBuff);//DataStr:string;
FreeMem(DataBuff);
end;这段代码DataStr的值永远都是'',我也知道为什么,FreeMem(DataBuff)的原因但这段代码必须这样写,重要的是如何赋值给DataStr,而不受FreeMem(DataBuff)的影响?

解决方案 »

  1.   

    1 GetMem只是对其分配了空间,并没有进行初始化和赋值,
    2 你的DataStr:=Trim(DataBuff);是正确的
    3 给你一个例子
    var  F: file;
      Size: Integer;
      Buffer: PChar;
      S;String;
    begin
      AssignFile(F, 'test.txt');
      Reset(F, 1);
      try
        Size := FileSize(F);
        GetMem(Buffer, Size);
        try
          BlockRead(F, Buffer^, Size);
          s:=BUffer;showmessage(s);
        finally
          FreeMem(Buffer);
        end;
      finally
        CloseFile(F);
      end;end;
      

  2.   

    1 GetMem只是对其分配了空间,并没有进行初始化和赋值,
    2 你的DataStr:=Trim(DataBuff);是正确的
    3 给你一个例子
    var  F: file;
      Size: Integer;
      Buffer: PChar;
      S;String;
    begin
      AssignFile(F, 'test.txt');
      Reset(F, 1);
      try
        Size := FileSize(F);
        GetMem(Buffer, Size);
        try
          BlockRead(F, Buffer^, Size);
          s:=BUffer;showmessage(s);
        finally
          FreeMem(Buffer);
        end;
      finally
        CloseFile(F);
      end;end;
      

  3.   

    to  firetoucher(风焱) :其实我的代码是错误的,不是语法错误,而是结果错误,当FreeMem(DataBuff)后,DataStr的值会变回'',我必须返回这个值!
      

  4.   

    pchar向string的转化是拷贝转换,不会因为你释放了pchar而无效
      

  5.   

    谢谢谢谢,不好意思,问题不是出在这里!
    你说的对,不会因为释放了pchar而无效