2011-03-20 7 views
1

I 객체가 선언과 같이예기치 않은 결과가

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); 
     } 

그러나 내가 실행에 오류가 : 나는 아래의 코드를 사용하여 몇 가지 물건을 구문 분석하려고 기본적으로

private string SourceProgram; 

:

-  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

,536입니다

무엇이 잘못 되었습니까? 문자열 변수 SourceProgramlength < 46입니까?

예인 경우이 코드를 수정하는 방법은 무엇입니까?

+0

여기서 'CurrentNdx'를 재설정 하시겠습니까? 그리고 예 - 문자열은 47 자 미만인 것으로 보입니다. – BrokenGlass

+0

"문자열 변수 ... <46입니까?" 디버거에서 볼 수 있어야합니다. –

+0

@ Lasse V. Karlsen :: 그것은 범위를 벗어난 것이 명백하지 않습니다. @BrokenGlass :: 나는 CurrentNdx를 파일로 읽는 데 사용하기 때문에 재설정 할 수 없습니다. 계속 증가해야합니다. – Sadique

답변

0

예,이 오류는 SourceProgram이 47 자 미만임을 나타냅니다. 그것은 SourceProgram의 내용을 보지 않고도 우리가 여러분에게 말할 수있는 것입니다.

0

코드는 SourceProgram 문자열의 줄 바꿈 문자를 찾습니다. 어쩌면 SourceProgram에 \ n이 포함되어 있지 않은 것입니까? 확실히

는 \ n을 또한

의 위치를 ​​찾기 위해 int position = SourceProgram.indexOf("\n")를 사용하는 것이 좋을 것이다, 당신은 가능성이

+0

@ user667389 그런 다음 http://msdn.microsoft.com/en-us/library/5xkyx09y.aspx를 사용하십시오.이 indexOf는 검색 할 첫 번째 문자를 지정합니다. 그럼이 CurrentNdx를 업데이 트하는 데 사용할 수 있습니까? – Kurru

0
다른 곳에서 필요한 것이 코드 0으로 CurrentNdx를 재설정 할 수 표시되지 않습니다
while (SourceProgram[CurrentNdx] != '\n') 
        CurrentNdx++; 

어쩌면 SourceProgram 문자열에 개행 문자가 포함되어 있지 않거나 CurrentNdx가 문자열의 개행 문자를 벗어난 후에 함수가 호출 될 수 있습니다.

+0

해당 파일을 읽는 중 .. 개행 수가 많습니다. – Sadique

관련 문제