我有一个声明为:
的对象private string SourceProgram;
基本上我试图使用下面的代码解析一些东西:
private void LabelScan(System.IO.BinaryWriter OutputFile, bool IsLabelScan)
{
if (char.IsLetter(SourceProgram[CurrentNdx]))
{
if (IsLabelScan) LabelTable.Add(GetLabelName(), AsLength);
while (SourceProgram[CurrentNdx] != '\n')
CurrentNdx++;
CurrentNdx++;
return;
}
EatWhiteSpaces();
ReadMneumonic(OutputFile, IsLabelScan);
}
但是我在执行时遇到错误:
- SourceProgram[CurrentNdx]
'SourceProgram[CurrentNdx]' threw an exception of
type 'System.IndexOutOfRangeException' char {System.IndexOutOfRangeException}
- base {"Index was outside the bounds of the array."}
System.SystemException {System.IndexOutOfRangeException}
CurrentNdx
的价值是46。
出了什么问题。是SourceProgram
的字符串变量length < 46
吗?
如果是,请如何修复此代码?
答案 0 :(得分:0)
代码似乎在字符串SourceProgram中寻找新的行字符。也许SourceProgram不包含\ n?
当然最好使用int position = SourceProgram.indexOf("\n")
来找到\ n
此外,您似乎没有在此代码中将CurrentNdx重置为零,这可能在其他地方需要
答案 1 :(得分:0)
while (SourceProgram[CurrentNdx] != '\n')
CurrentNdx++;
也许您的SourceProgram字符串不包含换行符,或者在CurrentNdx超出字符串中的任何换行符后调用该函数。
答案 2 :(得分:0)
是的,此错误表明SourceProgram少于47个字符。虽然没有看到SourceProgram的内容,但我们几乎可以告诉你。