Arrays Inno安装程序访问字符串的增量数组
我有一个字符串数组。当需要使用函数时,我会增加此数组:Arrays Inno安装程序访问字符串的增量数组,arrays,string,inno-setup,pascal,Arrays,String,Inno Setup,Pascal,我有一个字符串数组。当需要使用函数时,我会增加此数组: function insertMessageAction(list: TMessagesActions; message: String): TMessagesActions; var lenght: integer; begin if message <> '' then begin lenght := GetArrayLength(list); SetArrayLength(list, lenght
function insertMessageAction(list: TMessagesActions; message: String): TMessagesActions;
var
lenght: integer;
begin
if message <> '' then begin
lenght := GetArrayLength(list);
SetArrayLength(list, lenght +1);
if GetArrayLength(list) > lenght then begin
list[lenght] := message
end;
end;
result := list;
end;
函数insertMessageAction(列表:tmessageActions;消息:String):tmessageActions;
变量
长度:整数;
开始
如果消息为“”,则开始
长度:=GetArrayLength(列表);
设置阵列长度(列表,长度+1);
如果GetArrayLength(列表)>长度,则开始
列表[长度]:=消息
结束;
结束;
结果:=列表;
结束;
如果反增量为0到2,则没有问题,当我增量到3长度时,数组已损坏,列表的“值”为:“访问地址00403498处的冲突。读取地址0000006A”
不可能创建2个项目(字符串)的更长数组吗?字符有限制吗
谢谢。首先,不要在任务中使用数组。更改字符串数组大小时发生的内存重新分配是一项昂贵的操作。更重要的是,您试图返回该输入数组的副本(以错误的方式),这将是不必要的低效 我强烈建议您使用
TStringList
,它用于字符串集合。通过使用TStringList
,您问题的全部代码将变成:
StringList.Add(Message);
但是你的问题。这是可能的,但你需要遵守一些事情;至少:
Result := list;
InputLen := GetArrayLength(List);
SetArrayLength(Result, InputLen + 1);
for I := 0 to InputLen - 1 do
Result[I] := List[I];
Result[InputLen] := Message;
[Code]
type
TMessagesActions = TArrayOfString;
procedure InsertMessageAction(var AList: TMessagesActions;
const AMessage: String);
var
ArrayLen: Integer;
begin
ArrayLen := GetArrayLength(AList);
SetArrayLength(AList, ArrayLen + 1);
AList[ArrayLen] := AMessage;
end;
首先,更改数组大小时发生的内存重新分配是一项昂贵的操作。你甚至复制了一份要退回的文件,这也是无效的。如果我是你,我会使用
TStringList
,它更适合字符串集合。此外,通过使用TStringList
,您问题中的所有代码将被缩短为StringList.Add(Message)代码>。谢谢。问题解决了。Inno设置和Pascal对我来说是新的,不知道所有的函数和对象。