以下是两个函数:
函数一:
function read(var outStr:string):integer;
var
f:string;
begin
   f:=’assssssssqqqqqqq’
   outStr :=f;
   result:= 1;
end;
函数二:
procedure TForm1.Button1Click(Sender: TObject);
var
   a:string;
   b:integer;
begin
  a:='  ';
  b:=read(a);
end;函数二调用了函数一之后,a的返回值为空。请问如何能让a正确的返回函数一中赋过的值。如果a要接收100个字符,而a的初始化    a:='  '  会不会影响 它对这100个字符的接收。

解决方案 »

  1.   

    implementation{$R *.dfm}
    function GetString(var OutString :string):integer;
    var
      Temp :string;
    begin
      Result := 0;
      Temp := 'My function OutString !';
      OutString := Temp;
      Result :=Length(Temp);
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      S :string;
      R :integer;
    begin
      S := ' ';
      R := GetString(S);
      Showmessage(S+' Return string length is :'+IntToStr(R));
    end;end.
    本人的代码,运行后Showmessage显示出:My function Outstring ! Return string length is : 23
      

  2.   

    那请帮我看一下,我的代码 为什么不能正确输出呢, 请帮我指正一下,大侠。
    function read(var outStr:string):integer;
    var
    f:string;
    begin
      f:=’assssssssqqqqqqq’ //缺少了";"号。
      outStr :=f;
      result:= 1;
    end;
    缺一个分号,编译时会报错吧。
      

  3.   

    function read(var outStr:string):integer;这个函数中的参数是引用参数,所以对outStr赋值就是对传入的参数a赋值,所以你函数一里没必要多一个变量f
    函数一:
    function read(var outStr:string):integer;
    begin
      outStr:=’assssssssqqqqqqq’
      result:= 1;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      a:string;
      b:integer;
    begin
      a:=' ';
      b:=read(a);
      showmessage(a);//肯定会是’assssssssqqqqqqq’了
      showmessage(IntToStr(b));//肯定是1
    end;
      

  4.   

    为什么我加上这一句:showmessage(c);  观察c的值就是c=' assssssssqqqqqqq',但是不加这一句,观察c的值就是 c=''
      

  5.   


    你代码里可没c啊
    你什么时候观察的?你在执行完调用read函数的代码后再观察呢?不用怀疑,错不了。
      

  6.   

    你给的两段代码中,其中的
    函数二:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      a:string;
      b:integer;
    begin
      a:=' ';
      b:=read(a);
    end;
    在调用了 read函数之后,再没有使用过a,因此a被系统优化了
    如果你的断点在 end; 这条语句上,你会发现 a 本身的值是0 (Integer(a));也就是空串。
    这是编译系统优化的结果