void search(FILE *fp){
char lines[81];
char iden[11];
int i = 0;
int count = 1;
while(!feof(fp)){
fgets(lines,80,fp);
// If the line dosesn't start with #, space, or tab, it has identifier
if (lines[0] != '#' && lines[0] != ' ' && lines[0] != '\t'){
// An identifier ends with ':'
while (lines[i] != ':'){
iden[i] = lines[i];
++i;
}
ins(iden, count);
}
++count;
}
}
我收到这样的错误:
p4.c:93:12:运行时错误:索引11超出类型' char [11]'
的界限p4.c:92:17:运行时错误:索引81超出类型' char [81]'
的界限p4.c:93:22:运行时错误:索引81超出类型' char [81]'
的界限分段错误
注意:我的输入文件包含根据上述错误检查的数据。我的意思是每行最多80个字符,包括\ n和标识符的最大大小为10.并且行不以'#'开头。或空格或制表符在行的开头包含一个标识符,以'结尾:'最大尺寸为10,包括':#39;
在上面代码的第二个while循环中发生了什么? 为什么我会收到此错误?
p.s:我已经打开了我的文件,并在我的主方法中检查了它
答案 0 :(得分:0)
您永远不会重置计数器i
,也不会在标识符中添加终止符。
所以试试:
i=0;
while (lines[i] != ':'){
iden[i] = lines[i];
++i;
}
iden[i]='\0';
但为了安全起见,你应该加以保护,所以实际使用:
while (lines[i] != ':' && i<10){
永远不要相信输入,并始终确保您的程序永远不会超过其变量的范围。