function TForm1.StrUpper(Dest, Source: PChar; MaxLen: Integer): PChar;
var 
  I: Integer; 
begin 
  I := 0;
   while (I < MaxLen) and (Source[I] <> #0) do
   begin 
    Dest[I] := UpCase(Source[I]);
    Inc(I);
   end;
  Dest[I] := #0;
  Result := Dest;
end;下面调用:
var
  dest:array of PChar;
  dest2:array[0..255] of char;
begin
  Edit1.Text:=StrUpper(dest,PChar(Edit2.Text),12);  不正确,
  Edit1.Text:=StrUpper(dest2,PChar(Edit2.Text),12); 正确的。
end;能解释一下为什么吗?

解决方案 »

  1.   

    Dest, Source: PChar
    改为
    Dest, Source: stringSource[I]这种方式,Source要声明为string类型
      

  2.   

    dest是一个动态数组,关于动态数组的用法 参考delphi help-- Dynamic arrays.
    如果是事先设定了dest的大小,就不会有问题了
      

  3.   

    Edit1.Text:=StrUpper(dest,PChar(Edit2.Text),12);  不正确, 
    没有分配内存
    Edit1.Text:=StrUpper(dest2,PChar(Edit2.Text),12); 正确的。
    静态数组,已经分配内存了
      

  4.   

    procedure TForm1.btn1Click(Sender: TObject);
    var
      dest,s :PChar;
    begin
      s := 'abcdEFGh';
      Dest := nil;
      GetMem(dest,8);  
      edt1.Text :=  StrUpper(dest,s,8);
      FreeMem(dest);
    end;function TForm1.StrUpper(Dest, Source: PChar; MaxLen: Integer): PChar;
    var
      I: Integer;
    begin 
      I := 0;
      while (I < MaxLen) and (Source^ <> #0) do
      begin
        Dest^ := UpCase(Source^);
        inc(dest);
        inc(Source);
        Inc(I);
      end; 
      inc(Dest,-8);
      Result := Dest;
    end;