2011-03-20 181 views
1

我有一個對象聲明:意外的結果

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。

出了什麼問題。是字符串變量SourceProgramlength < 46

如果是的話,如何解決這段代碼?

+0

你在哪裏重置'CurrentNdx'?是的 - 該字符串似乎少於47個字符。 – BrokenGlass 2011-03-20 19:34:33

+0

不應該問題「是字符串變量... <46?」是你應該能夠在調試器中看到的東西嗎? – 2011-03-20 19:35:51

+0

@ Lasse V. Karlsen ::它不是顯而易見的。 @BrokenGlass ::我無法重置CurrentNdx,因爲即時通訊使用它讀入文件,它需要不斷增加。 – Sadique 2011-03-20 19:38:26

回答

0

是的,這個錯誤表明SourceProgram有少於47個字符。這幾乎可以告訴你,但沒有看到SourceProgram的內容。

0

該代碼似乎尋找字符串SourceProgram中的新行字符。也許SourceProgram不包含\ n?

毫無疑問這將是更好地使用int position = SourceProgram.indexOf("\n")找到\ n

同樣的位置,你不會出現在此代碼,這可能會在其他地方需要

+0

@ user667389那麼爲什麼不使用http://msdn.microsoft.com/en-us/library/5xkyx09y.aspx這個indexOf指定要從中搜索的第一個字符。那麼這可以用來更新CurrentNdx? – Kurru 2011-03-20 19:42:44

0
被重置CurrentNdx爲零
while (SourceProgram[CurrentNdx] != '\n') 
        CurrentNdx++; 

也許您的SourceProgram字符串不包含換行符,或者在CurrentNdx超出字符串中的任何換行符後調用該函數。

+0

它正在讀取一個文件.. 它有很多換行符。 – Sadique 2011-03-20 19:41:19