本人刚学C#,现在遇到个问题想不明白,希望大家帮忙解决下!是这样的,下面代码的作用是把一个IP地址(如127.0.0.1)分离成127 0 0 1,就是以“.”为分割点,分离四个数字。但是有个疑惑就是我明明定于了数组a的只能存储3个字符串。为什么下面FOR循环用了4次,然后下面还输出a[5]也没有报错数组越界的错误呢?搞不懂!!!!using System;
using System.Collections.Generic;
using System.Text;namespace myStudyDemoControl
{
    //<summary>
    //此示例是我用来学习C#做的例子
    //</summary>
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入你的IP地址:");
            string[] a = new string[3];
            string b = Console.ReadLine();
            a = b.Split('.');
            for (int i = 0; i < 4; i++)
            {
                
                Console.WriteLine("第 {0}个数为:{1}",i+1,a[i]);
            }
            Console.WriteLine(a[5]);
        }
    }
}

解决方案 »

  1.   

    a = b.Split('.'); 这时把 a 重新赋值了,
    a = new string[3]; 的值已经被改了.for (int i = 0; i < 4; i++)改为 for (int i = 0; i < a.Length; i++)看看数组的实际长度.
      

  2.   

    你可以输出看看你的a的长度到底是啥
    a.length
      

  3.   

    a = b.split('.')之后,实际a已经不是上面new的那个数组了,但是下面的a[5]应该是取不到的
      

  4.   

    for (int i = 0; i < 4; i++)改为 for (int i = 0; i < a.Length; i++)
    同为正解
      

  5.   

    string[] a = new string[3]; // 此时数组 a 的长度为3个元素
    string b = Console.ReadLine();
    a = b.Split('.');  // 此时数组 a 被重新赋值, 长度依 b 的内容而定
    // 再例如:
    int x = 5;  // 此时 x 的值为 5.
    x = int.Parse(Console.ReadLine()); // 此时 x 被重新赋值, 由你的输入决定.
      

  6.   

    string[] a = new string[3];
                string b = "127.0.0.1";
                a = b.Split('.');
                this.button1.Text = a.Length.ToString();
                this.button1.Text = a[5];lz的a[5]不报越界? 我的为什么会啊? 有没搞错啊、。。
      

  7.   

    为什么这样呢?Console.WriteLine(a[5]);
    编译可以通过,但是在执行发生了一个Exception了。
    因为在编译的时候无法得到a的实际长度。a.length在实际运行的时候才可能获得。
    因为a是对b.split('.')后的结果,而b是靠你输入。如果你输入是【127.0.0.1】按‘.’分就是4个,如果你输入【1.2.3.4.5.6.7.8.9】那么a.lenght就是9;如果想这样写的话,最好写下try{...}catch{...}去捕捉下。这样比较好。