begin
iLen := High(arrLsYlJh);
Inc(iLen);
setLength(arrLsYlJh,iLen);
end;
这样试试!
iLen := High(arrLsYlJh);
Inc(iLen);
setLength(arrLsYlJh,iLen);
end;
这样试试!
解决方案 »
- [讨论] 你所不知道的inherited
- 请问在IDTCPSERVER控件的EXECUTE事件中如何确定ReadBuffer(buf,size)中的size
- 【绘图问题】大家都玩过“大家来找茬”游戏吧。
- 有没有这样的函数?????
- 英格兰VS法国,CSDN盘,猜对不给钱,给分。
- 好多贴都结不了,因为没有回复。现在强制结贴,信誉分是直线下降,唉。
- DLL中使用多线程间歇性未响应
- 如何把自己的一些图片组成.avi文件?急急急
- TQuery sql查询的结果可以传递给变量吗?
- Borland socket server已停止工作
- 奇怪的流与动态数组问题
- 流的读方法,怎么不能把数据读到动态数组里(代码见内)???急急急
arrLsYlJh[0].LdBh := strLdBh;
arrLsYlJh[0].WzDm := strWzDm;
arrLsYlJh[0].Sl := dSl;
也就是说,初始化下的动态数组长度是为0的。
begin
setlength(arrLsYlJh,length(arrLsYlJh)+1);
arrLsYlJh[iLen-1].LdBh := strLdBh;
arrLsYlJh[iLen-1].WzDm := strWzDm;
arrLsYlJh[iLen-1].Sl := dSl;
end;
这样好了!
procedure setArrayLsYlJh(strLdBh, strWzDm: String; dSl: Double);
var
Pos:integer;
begin
setlength(arrLsYlJh,length(arrLsYlJh)+1);
Pos := High(arrLsYlJh);
arrLsYlJh[Pos].LdBh := strLdBh;
arrLsYlJh[Pos].WzDm := strWzDm;
arrLsYlJh[Pos].Sl := dSl;
end;
原因是High返回的是数组的最大索引号。
实际记录是最大索引号+1,所以如果要记录加1 的话,需要High()+2,才是新数。
楼上的Length方法是不可行的。
谢各位
procedure setArrayLsYlJh(strLdBh, strWzDm: string; dSl: Double);
var
iLen: Integer;
begin
if High(arrLsYlJh) = -1 then //
begin
// 初始化以1前,High(arrLsYlJh)是为-1的(动态数组可用0下标)。
iLen := 1;
end
else
begin
//此时再用 ILen := High(arrLsYlJh); 使ILen总是返回0,造成循环
iLen := High(arrLsYlJh) + 1; // 这是正确的用法
Inc(iLen);
end;
setLength(arrLsYlJh, iLen);
// 初始化为1后,SetLength(arrLsYlJh, 1)使数组长度为1,High(arrLsYlJh)返回为0, arrLsYlJh[iLen - 1].LdBh := strLdBh;
arrLsYlJh[iLen - 1].WzDm := strWzDm;
arrLsYlJh[iLen - 1].Sl := dSl;
end;