各位老师好。
    我碰到了如下问题。
动态数组不能与字符串相互赋值。程序如下:
procedure TForm1.Button1Click(Sender: TObject);
var
x1:string;    //字符串
x2:array of char; // 动态数组
begin
x1:='abc123';
x2:=x1;      //出现错误: Incompatible types: 'String' and 'dynamic array'
             //为什么会出现上述错误?请各位老师指点为。
             //怎样才能实现动态数组与字符串相互赋值?
end;

解决方案 »

  1.   

    1.动态数据要setlength,
    2.String 到Char数组赋值,用函数StrPCOPYx1:='abc123';
    x2:=x1;  SetLength(x2,8);
    StrPCopy(x2,x1);
      

  2.   

    var
    x1:string;
    x2:array of char;
    i:Integer;
    begin
     x1:='1234';
     SetLength(X2,Length(X1));
     for i:=Low(X2) to High(X2) do X2[i]:=X1[i+1];
    end;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      x1: string; //字符串
      x2: array of char; // 动态数组
    begin
      x1:='abc123';
      SetLength(x2,8);
      StrPCopy(PChar(x2),x1);  ShowMessage(string(x2));
    end;
      

  4.   

    呵呵,不明白,string本身就是一个动态的字符数组,只不过下标是从1开始的,为什么还要用数组呢? 不过 楼上是正解!
      

  5.   

    补充一下:   wywry(Wyatt) ( )  
     
       
      var 
        x1:string;
        x2:array of char;
        i:Integer;
      begin
        x1:='1234';
        SetLength(X2,Length(X1));
        for i:=Low(X2) to  High(X2) do
        begin 
           if X1[i+1]=#0 then Break;//结束符,否则X2 Length(X1)之后还有字符串
           X2[i]:=X1[i+1];
        end;
    end;  
     
      

  6.   


      刚刚试了,要这样: 1.动态数据要setlength,
     2.String 到Char数组赋值,用函数StrPCOPY x1:='abc123'; 
     x2:=x1;   SetLength(x2,8);
     StrPCopy(@x2,PChar(x1)); //这里,要取指针地址 x1 转换为PChar
      

  7.   

    x1:='abc123'; 
     x2:=x1;   SetLength(x2,length(x1));
     Move(pchar(x1)^,pchar(x2)^,length(x2));