程序开发 > C# > 正文

索引超出了数组界限(数组越界)原因、示例及解决

亮术网 2020-08-13 本网原创

无论是什么语言,偶尔都会遇到索引超出了数组界限这样的错误提示,也就是数组越界(所用数组索引超出了数组实际索引)。例如,一个数组只有5个元素,数组索引(下标)又是从0开始的,如果定义的数组为 a,这样取取值 a[5],则会报数组越界错误,因为最后一个元素的索引是4,取最后一个元素应该这样 a[4]。

当然,在实际开发过程中很少会犯这么低级的错误,通常都是程序运行产生的动态数组,因某些情况一时没有考虑到而致数组越界。接着就举一些常见的索引超出了数组界限示例,为满足不同的需要,将举 javascript、C# 等语言的实例。

 

一、javascript 索引超出了数组界限示例

1、示例一:数组索引误从1开始,代码如下:

var arr = [1, 2, 3, 4, 5, 6];

 

错误:

for(var i = 1; i <= arr.length; i++){
    var tmp = arr[i];//当 i = arr.length,数组越界
  }

 

正确:

for(var i = 0; i < arr.length; i++){
    var tmp = arr[i];
  }

 

2、未判断数组长度,随意取值导致数组越界

假如要获取网页的所有 div 标签,事先没判断有多少个 div,就直接用下标取值,代码如下:

var arr = document.getElementsByTagName("div");
  var temp = arr[1];

 

如果网页中没有 div 或者只有一个 div,则 arr[1] 会发生数组越界错误,正确代码应该加一句判断:

if(arr.length > 1){
    var temp = arr[1];
  }

 

 

二、C# 索引超出了数组界限示例

假如要取一个文件夹中的所有文本文件,如果用数组长度取最后一个元素,则会产生数组越界错误,代码如下:

/// <summary>
  /// C#获取一个文件夹中所有文本文件
  /// </summary>
  /// <param name="path">文件夹路径</param>

  private void GetTxtFiles(string path)
  {
    DirectoryInfo di = new DirectoryInfo(path);
    FileInfo[] arrFi = di.GetFiles("*.txt");

  //错误
    string temp = arrFi[arrFi.Length].Name;//用数组长度取最后一个元素,则产生数组越界

  //正确
    string temp = arrFi[arrFi.Length - 1].Name;
  }

调用:

GetTxtFiles("G:\xq\test");