delphi xe10.2 strpas用于字符数组转换为字符串报错
其实不是strpas不能用而是字符数组需要结束符,举例:
procedure TForm1.Button1Click(Sender: TObject);
var
aa: array[0..1]of AnsiChar;
bb1: string;
begin
aa[0] := AnsiChar('1');
aa[1] := AnsiChar('2');
bb1 := StrPas(aa);
ShowMessage(bb1); //这里显示不正确
var
aa: array[0..2]of AnsiChar;
bb1: string;
begin
aa[0] := AnsiChar(‘1‘);
aa[1] := AnsiChar(‘2‘);
aa[1] := #0;
bb1 := StrPas(aa);
ShowMessage(bb1);
end;
上面的例子就能正确表示出bb1=12了
所以在使用字符数组前要初始化为#0,当然如果是调用dll中的字符数组的话就自己手工建立一个字符数组
长度为目标数组的长度加1
procedure TForm1.btn1Click(Sender: TObject);
var
aa: array[0..1]of AnsiChar;
bb1: string;
temp:array[0..2]of AnsiChar;
i:Integer;
begin
aa[0] := AnsiChar('1');
aa[1] := AnsiChar('2');
for i := 0 to Length(temp)-1 do
begin
temp[i]:=#0;
end;
for i := 0 to Length(aa)-1 do
begin
temp[i]:=aa[i];
end;
bb1 := StrPas(temp);
ShowMessage(bb1);
end;
这样也是可以的。
亲测可用,欢迎高手提供更好的方法 。
其实不是strpas不能用而是字符数组需要结束符,举例:
procedure TForm1.Button1Click(Sender: TObject);
var
aa: array[0..1]of AnsiChar;
bb1: string;
begin
aa[0] := AnsiChar('1');
aa[1] := AnsiChar('2');
bb1 := StrPas(aa);
ShowMessage(bb1); //这里显示不正确
end;
加入一个结束符#0
procedure TForm1.Button1Click(Sender: TObject);var
aa: array[0..2]of AnsiChar;
bb1: string;
begin
aa[0] := AnsiChar(‘1‘);
aa[1] := AnsiChar(‘2‘);
aa[1] := #0;
bb1 := StrPas(aa);
ShowMessage(bb1);
end;
上面的例子就能正确表示出bb1=12了
所以在使用字符数组前要初始化为#0,当然如果是调用dll中的字符数组的话就自己手工建立一个字符数组
长度为目标数组的长度加1
procedure TForm1.btn1Click(Sender: TObject);
var
aa: array[0..1]of AnsiChar;
bb1: string;
temp:array[0..2]of AnsiChar;
i:Integer;
begin
aa[0] := AnsiChar('1');
aa[1] := AnsiChar('2');
for i := 0 to Length(temp)-1 do
begin
temp[i]:=#0;
end;
for i := 0 to Length(aa)-1 do
begin
temp[i]:=aa[i];
end;
bb1 := StrPas(temp);
ShowMessage(bb1);
end;
这样也是可以的。
亲测可用,欢迎高手提供更好的方法 。