该程序在codechef上显示sisegv。分割错误。但我不能找到任何合适的方法来消除它
问题描述:
这是问题陈述:codechef problem 我的代码是:该程序在codechef上显示sisegv。分割错误。但我不能找到任何合适的方法来消除它
#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);
}
输出工作正常。但我不明白为什么每次提交我的代码时出现分段错误。我甚至试图减少我的数组大小,同时也减少了二维数组的大小。没有任何工作。似乎我正在访问数组越界,但我无法找到它。任何人都可以提出替代方法来做到这一点?
预先感谢您。
答
看来我正在访问数组越界,但我找不到它。
好了,你没有做任何边界检查,所以这是微不足道的构建输入你的代码确实访问数组越界。例如,下面的语句:
scanf("%s",p);
会溢出p[100]
如果输入线超过99个字符。
同样,给你的程序101输入字符串将溢出n[100][100]
阵列。
你知道当你“提交你的代码”时,你的程序正在测试什么?
+0
约束条件为: 字符串数 = 1 –
+1
@SayanDhar“字符串数
是的。它在本地编译器上工作正常。 –