3

我在以下 C# 程序中有问题。编写代码时没有错误,但是当我调试它时,会抛出一个异常,即索引超出了数组绑定的范围。

这里有什么问题?

using System;
class secmain
{
    public static void squarearg(int i)
    {
        int m=i*i;
        Console.WriteLine("The Square of the argument is {0}",m);
    }
    static void Main(String[] param)
    {
     Console.WriteLine("this program will convert your string argument to int and display the square of the numbe");
     int k = Int32.Parse(param[0]);
      squarearg(k);
      }
}
4

5 回答 5

9

好吧,调试它(通常)不会得到命令行参数param这就是你得到异常的原因。

您需要从命令行运行其可执行文件并从那里传递参数,例如在您的 dos 提示符下,(cmd)

C:\yourProjectPath\bin\debug> yourExecutable.exe 2

(在上面 2 中是您将在param[0]as 字符串中获得的命令行参数)

或者您可以使用Console.ReadLine从控制台获取值,然后处理它而不是命令行参数。

如果您想在调试过程中传递参数,请检查以下问题:调试时如何使用参数启动程序?

转到项目属性并在命令行参数文本框中的调试选项卡下指定命令行参数,如下图所示。

在此处输入图像描述

以上将为您4提供争论的结果2

于 2013-02-18T11:40:54.903 回答
4

如果单击项目属性,在 Debug 部分下,就在 Build 下方,您可以传入参数。

它看起来像这样:

/client:"Someclient.exe" 1 2 3

这意味着主要参数param不会为空,即param.Count > 0

于 2013-02-18T11:41:53.067 回答
1

这是因为这个语句 int k = Int32.Parse(param[0]);在运行时你没有传递任何值。并且您正在尝试使用command-line argument
这将指导您如何在 C# 中传递命令行参数的值

以这种方式运行你的程序

myfile.exe 125
于 2013-02-18T11:41:35.310 回答
1

使用param时会期望它是在命令行中给出的。尝试使用“secmain.exe 4”之类的东西运行它。或者你可以去Project Properties->Debug-> Start Options->Command line arguments那里输入一个值。

于 2013-02-18T11:41:42.280 回答
1
int k = Int32.Parse(param[0]);

我认为错误就在那里。您没有将任何参数传递给程序。

你可以做一个检查:

if (param.Length == 0)
{
   Console.WriteLine("No arguments have been passed into the program");
}

http://msdn.microsoft.com/en-us/library/aa664432(v=vs.71).aspx

于 2013-02-18T11:41:43.593 回答