var
  str:array of string;
  i:Integer;
  j:Integer;
begin
  SetLength(str,1);
  for i:=0 to 4 do
  begin
    j:=Length(Str);
    SetLength(str,Length(str)+1);
    Str[Length(Str)]:='xxxx';
  end;
  ShowMessage(str[0]);
  ShowMessage(str[1]);
  ShowMessage(str[2]);
  ShowMessage(str[3]);
end;
几个奇怪的地方,调试发现,i的值在第一次循环居然是5,第2次是4,第3次是3. 不是应该从0-4的吗???还有,为什么j:=Length(Str);为什么一直告诉我是随机数?调试发现str里面的元素个数确实是在递增呀!得到数组的长度怎么搞?Length也不行,SizeOf也不行?搞了几天,发现Delphi太不适合我用了,怎么都这么奇怪的,和观念很冲突

解决方案 »

  1.   


    high(Str)得到数组上标
    low(Str)得到数组下标就可以得到数组元素的数量了,不知道你说的数组的长度是不是这个??
      

  2.   

    我不管用用啥都不行把灵异的图发上来
    最下方居然有个  never used??????Fuck
      

  3.   

    把Compiler里面的Optimaztion关掉,就可以去掉优化选项了
      

  4.   

    我也明白了,还是自己书看的少啊!
    thanks
       gyk120
      

  5.   


    i是从0开始的,可以试一下下面的代码.
    var
      str:array of string;
      i:Integer;
      j:Integer;
    begin
      SetLength(str,1);
      for i:=0 to 4 do
      begin
        ShowMessage(IntToStr(i));
        j:=Length(Str);
        SetLength(str,Length(str)+1);
        Str[Length(Str)]:='xxxx';
      end;
      ShowMessage(str[0]);
      ShowMessage(str[1]);
      ShowMessage(str[2]);
      ShowMessage(str[3]);
    end;
      

  6.   

    SetLength(str,Length(str)+1);
        Str[Length(Str)]:='xxxx';
      该是 
      Str[Length(Str) - 1]:='xxxx';
     或
    Str[high(Str) - 1]:='xxxx';