gpt4 book ai didi

c - 如何消除这种段错误?

转载 作者:行者123 更新时间:2023-11-30 16:53:49 25 4
gpt4 key购买 nike

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,包括 ':'

它发生在上面代码的第二个 while 循环中吗?为什么我会收到此错误?

p.s:我已经打开了我的文件并在我的主方法中检查了它

最佳答案

您永远不会重置计数器i,也不会向标识符添加终止符。

所以尝试一下:

i=0;
while (lines[i] != ':'){
iden[i] = lines[i];
++i;
}
iden[i]='\0';

但为了安全起见,您应该采取保护措施,因此实际使用:

while (lines[i] != ':' && i<10){

永远不要相信输入,并始终确保您的程序永远不会超出其变量的范围。

关于c - 如何消除这种段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40708491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com