在C#中创建此范围匹配方法后,我一直收到IndexOutOfRangeException。我真的不确定自己做错了什么。
private string RangeMatch(char lastnameLetter, char[] letterLimits, string[] times)
{
string regTime;
int index = letterLimits.Length - 1;
while (index >= 0 && lastnameLetter < letterLimits[index])
--index;
regTime = times[index];
return regTime;
}
答案 0 :(得分:1)
您必须为数组索引指定非负数,整数,数字。
您在return
之前的最后陈述:
regTime = times[index];
由于之前的while循环,的index
值可能为-1
:
while (index >= 0 && lastnameLetter < letterLimits[index])
--index;
当index >= 0
和lastnameLetter < letterLimits[index]
到最后(完美匹配)时会发生这种情况。
在return null
index
-1
之前,在分配之前,一次修复将是times == null
。您还可以将条件组合为返回null以及其他一些可能的错误(例如times.Length < index - 1
或private string RangeMatch(char lastnameLetter, char[] letterLimits, string[] times)
{
string regTime;
int index = letterLimits.Length - 1;
while (index >= 0 && lastnameLetter < letterLimits[index])
--index;
if (index == -1 || times == null || times.Length < index - 1) //invalid cases
return null; //return null
regTime = times[index];
return regTime;
}
)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char *argv[])
{
//{"TYPE", "ID", "SCOPE", "VALUE"}
char *symbol_table_variables[503][4];
int scope = 0;
int lower_bound_of_big_boy_counter = 0;
sprintf (symbol_table_variables[lower_bound_of_big_boy_counter][2], "%d", scope);
printf("symbol_table_variables[lower_bound_of_big_boy_counter][2] %s \n",
symbol_table_variables[lower_bound_of_big_boy_counter][2]);
return 0;
}