无法理解为什么在某些特定的测试用例中它会返回分段错误而在其他测试用例上却被接受。请建议。
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,j,k,count=0,r;
scanf("%i",&n);
char string[500000];
scanf("%s",&string[i]);
int sqr[500000];
sqr[0]=0;
for(i=1;i<=n+1;i++)
{
sqr[i]=i*i;
}
for(i=0;i<n;i++)
{
for(r=1;r<=n+1;r++)
{
if((sqr[r]%(i+1))==0)
{
k=(sqr[r]/(i+1))-1;
j=r-1;
int tempi = (int) string[i];
int tempj = (int) string[j];
int tempk = (int) string[k];
if(tempi==97 && tempj==98 && tempk==99) count++;
}
}
}
printf("%i",count);
return 0;
}
答案 0 :(得分:1)
在您的代码中
scanf("%s",&string[i]);
i
具有不确定的价值。不能保证指针算术有效。它可以使指针指向任何位置,包括无效的内存。尝试访问该文件会导致undefined behavior。
那说,一些一般的建议
int main()
应该int main(void)
符合托管环境。scanf()
。