function mf_AddZero_Righ(ShuJuP:PChar;ChangDu:Integer):PChar;
var
  restr:string;
  strlength,i:integer;
  ShuJu:string;
begin
  ShuJu:=strpas(ShuJuP);
  restr:=ShuJu;
  strlength:= Length(ShuJu);
  for i:= strlength to ChangDu-1 do
  begin
    restr:='0'+restr;
  end;
  Result:=PChar(restr);
end;
这里一个完成左起补齐字符串的 function ,在测试中发现 
  .......
   mf_AddZero_Righ('3',9);
  .......
  得到的结果是 000000003
  .......
   mf_AddZero_Righ('123456789',9);
  得到是结果却是 12345678 
 高手们这是问什么哪 ???

解决方案 »

  1.   

    千万不要将栈上的数据做为函数输出的数据, 也就是局部变量不能用来输出, 因为函数结束时,栈数据都会被俄回收, 你这里的要求实际上用函数表示实际上是
    function ExtStrLen(const source: string; fillchar: Char; MaxLength: integer): string;
    var
      len:Integer;
    begin
      Result := source;
      len := MaxLength - Length(source);
      if Len > 0 then
        Result := StringOfChar(fillchar, len) + Result;
    end;调用时为 ExtStrLen('1234', '0', 8) 最后结果是00001234 
      

  2.   

    function mf_AddZero_Righ(ShuJuP:PChar;ChangDu:Integer):PChar; 
    var 
      restr:string; 
      strlength,i:integer; 
      ShuJu:string; 
    begin 
      ShuJu:=strpas(ShuJuP); 
      restr:=ShuJu; 
      strlength:= Length(ShuJu); 
      for i:= strlength to ChangDu-1 do 
      begin 
        restr:='0'+restr; 
      end; 
      Result:=PChar(restr); 
    end;
    我把上面 function 改为
    function mf_AddZero_Righ(ShuJu:string;ChangDu:Integer):string; 
    var 
      restr:string; 
      strlength,i:integer;  
    begin  
      restr:=ShuJu; 
      strlength:= Length(ShuJu); 
      for i:= strlength to ChangDu-1 do 
      begin 
        restr:='0'+restr; 
      end; 
      Result:=restr; 
    end;
     然后使用
    ....... 
      mf_AddZero_Righ('3',9); 
      ....... 
      得到的结果是 000000003 
      ....... 
      mf_AddZero_Righ('123456789',9); 
      得到是结果是 123456789
     
     到底是哪里有问题啊,PChar的原因吗?改怎么解释哪?