该程序在codechef上显示sisegv.分段错误是.但是我找不到任何合适的方法来删除它



这是问题陈述:codechef 问题 我的代码是:

#include<stdio.h>
#include<string.h>
char p[100];
char n[100][100];
int main()
{
int a,c=0;
int x,y,z=0;
scanf("%d",&a);
while(a--)
{
int mid,l,i,j,f;
scanf("%s",p);
l=strlen(p);
mid=l/2;
if(l%2==0)
{
f=0;
for(i=0,j=l-1;i<=mid,j>mid;i++,j--)
{
if(p[i]!=p[j])
{
f=1;
break;
}
}
if(f==0)
{
strcpy(n[c],p);
c++;
}
}
else
{
f=0;
for(i=0,j=l-1;i<mid,j>mid;i++,j--)
{
if(p[i]!=p[j])
{
f=1;
break;
}
}
if(f==0)
{
strcpy(n[c],p);
c++;
}
}
}
for(x=0;x<=c;x++)
{
for(y=x+1;y<=c;y++)
{
if(n[x][0]==n[y][0])
z++;
}
}
printf("%d",z);
}

输出工作正常。但是我不明白为什么每次提交代码时都会出现分段错误。我甚至试图减小我的数组大小,也减小 2D 数组的大小。没有任何效果。似乎我正在越界访问数组,但我找不到它。谁能建议其他方法也可以做到这一点?

提前谢谢你。

似乎我正在越界访问数组,但我找不到它。

好吧,您不执行任何边界检查,因此构造代码确实访问越界数组的输入是微不足道的。例如,此语句:

scanf("%s",p);

如果输入行超过 99 个字符,将溢出p[100]

同样,为程序提供 101 个输入字符串将使n[100][100]数组溢出。

当您"提交代码"时,您知道您的程序正在测试什么输入吗?

相关内容

  • 没有找到相关文章

最新更新