我似乎得到一个OutOfRangeException
,声明如下:“索引超出表限制”(不是确切的翻译,我的VS是法语),这是相关的代码:
pntrs = new int[Pntrnum];
for (int i = 0; i < Pntrnum; i++)
{
stream.Position = Pntrstrt + i * 0x20;
stream.Read(data, 0, data.Length);
pntrs[i] = BitConverter.ToInt32(data, 0);
}
Strs = new string[Pntrnum];
for (int i = 0; i < Pntrnum; i++)
{
byte[] sttrings = new byte[pntrs[i + 1] - pntrs[i]];//the exception occures here !
stream.Position = pntrs[i];
stream.Read(sttrings, 0, sttrings.Length);
Strs[i] = Encoding.GetEncoding("SHIFT-JIS").GetString(sttrings).Split('\0')[0].Replace("[FF00]", "/et").Replace("[FF41]", "t1/").Replace("[FF42]", "t2/").Replace("[FF43]", "t3/").Replace("[FF44]", "t4/").Replace("[FF45]", "t5/").Replace("[FF46]", "t6/").Replace("[FF47]", "t7/").Replace("[0a]", "\n");
ListViewItem item = new ListViewItem(new string[]
{
i.ToString(),
pntrs[i].ToString("X"),
Strs[i],
Strs[i],
});
listView1.Items.AddRange(new ListViewItem[] {item});
}
我做错了吗?
答案 0 :(得分:4)
C#数组是零索引;也就是说,数组索引从零开始(在你的情况下,Pntrnum-1
中有从0到pntrs
的元素),所以当i == Pntrnum - 1
pntrs[i + 1]
尝试访问pntrs
答案 1 :(得分:4)
i + 1是循环的最后一次迭代的问题 在9中假设最后一个指数 那么它会尝试获取10个问题
答案 2 :(得分:3)
由于以下行中的i + 1,您获得了OutOfRangeException
:
byte[] sttrings = new byte[pntrs[i + 1] - pntrs[i]];
您可以通过以下方式轻松防止这种情况:
for (int i = 0; i < Pntrnum - 1; i++)
{
byte[] sttrings = new byte[pntrs[i + 1] - pntrs[i]];
...
}
这样可以防止i + 1超出范围。