Неожиданный результат от этого кода - PullRequest
1 голос
/ 20 марта 2011

У меня есть объект, объявленный как:

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?

Если да, как исправить этот код?

Ответы [ 3 ]

0 голосов
/ 20 марта 2011
while (SourceProgram[CurrentNdx] != '\n')
                    CurrentNdx++;

возможно, ваша строка SourceProgram не содержит символа новой строки, или функция вызывается после того, как CurrentNdx находится за пределами всех строк новой строки.

0 голосов
/ 20 марта 2011

Да, эта ошибка говорит о том, что SourceProgram содержит менее 47 символов.Это почти все, что мы можем вам сказать, не видя содержимого SourceProgram.

0 голосов
/ 20 марта 2011

Код, похоже, ищет символ новой строки в строке SourceProgram.Возможно, SourceProgram не содержит \ n?

Конечно, было бы лучше использовать int position = SourceProgram.indexOf("\n"), чтобы найти позицию \ n

Кроме того, вы, похоже, не сбрасываетеCurrentNdx к нулю в этом коде, что, вероятно, потребуется в другом месте

...