动态数组不能与字符串相互赋值

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

...全文
308 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
halfdream 2006-12-31
  • 打赏
  • 举报
回复
x1:='abc123';
x2:=x1;

SetLength(x2,length(x1));
Move(pchar(x1)^,pchar(x2)^,length(x2));
lxj_com2006 2006-12-30
  • 打赏
  • 举报
回复

测试通过!
lxj_com2006 2006-12-30
  • 打赏
  • 举报
回复

刚刚试了,要这样:

1.动态数据要setlength,
2.String 到Char数组赋值,用函数StrPCOPY

x1:='abc123';
x2:=x1;

SetLength(x2,8);
StrPCopy(@x2,PChar(x1)); //这里,要取指针地址 x1 转换为PChar
lihuasoft 2006-12-30
  • 打赏
  • 举报
回复
do2008 在一楼和四楼所说的,就是最正统的方案
lihuasoft 2006-12-30
  • 打赏
  • 举报
回复
还在研究? 一楼不是已经给出正确答案了吗? 呵呵
lxj_com2006 2006-12-30
  • 打赏
  • 举报
回复
补充一下:

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;



winxkm 2006-12-30
  • 打赏
  • 举报
回复
呵呵,不明白,string本身就是一个动态的字符数组,只不过下标是从1开始的,为什么还要用数组呢? 不过 楼上是正解!
bamfk10231023 2006-12-29
  • 打赏
  • 举报
回复
StrPCopy
do2008 2006-12-12
  • 打赏
  • 举报
回复
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;
zghncyjjwang 2006-12-12
  • 打赏
  • 举报
回复
我刚试了试,不行。
wywry 2006-12-12
  • 打赏
  • 举报
回复
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;
do2008 2006-12-12
  • 打赏
  • 举报
回复
1.动态数据要setlength,
2.String 到Char数组赋值,用函数StrPCOPY

x1:='abc123';
x2:=x1;

SetLength(x2,8);
StrPCopy(x2,x1);

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧