#include<iostream>
#include<string>
using namespace std;
int main()
{
char arr[1000][80];
char output[1000][80];
int n,i,j;
int num[1000];
cin>>n;
for(i=0;i<n;i++)
{
cin>>num[i];
cin>>arr[i];
}
for(i=0;i<n;i++)
{
for(j=(num[i]-1);j<(strlen(arr[i])-1);j++)
{
arr[i][j]=arr[i][j+1];
}
arr[i][j]='\0';
cout<<"\n"<<(i+1)<<" "<<arr[i];
}
return 0;
}
这是在Spoj上传时出现上述错误的代码。相同的代码在Borland C ++上运行良好。
答案 0 :(得分:2)
根据您传入此计划的输入,变量n
可能超过1000,cin>>arr[i]
可能会读取超过80个字符,如果num[i] <= 0 || num[i] >= 80
则您将过去索引你的一个字符串的开头或结尾。存在所有这些问题是因为此代码使用固定大小的数组,并且不执行任何边界检查。
答案 1 :(得分:0)
乍一看,我没有什么本质上的错误。但是,在提供代码无法处理的输入时,肯定非常有可能出现段错误。
例如,没有什么可以防止在输入arr
之外写作。
是否有针对此失败的特定输入?
答案 2 :(得分:0)
变量n
的值可以大于数组边界。这就是为什么你的代码可以给出数组索引超出范围的异常,以及为什么它会给出运行时错误(SIGSEGV
)。