我在代码块上测试了这段代码并且它工作正常但是当我在Ideone上运行时,我在OJ上遇到运行时错误和SIGSEGV错误。我在网上看到SIGSEGV错误是由于内存访问受限造成的。但如果它这样做,为什么不会有代码块抱怨......
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
int t, i, j, k, x, temp;
int num1[10000], num2[10000];
char c;
bool f = true;
cin >> t;
while (t--)
{
for (i = 0; i < 10000; i++)
{
num1[i] = 0;
num2[i] = 0;
}
i = 0;
j = 0;
while (!isspace(c = getchar()))
num1[i++] = c - '0';
while (!isspace(c = getchar()))
num2[j++] = c - '0';
x = i > j ? i : j;
temp = 0;
for (k = 0; k < x; k++)
{
i = temp + num1[k] + num2[k];
if (f)
{
if (i % 10 != 0)
{
f = false;
cout << i % 10;
}
}
else cout << i % 10;
temp = i / 10;
}
if (temp != 0)
cout << temp;
cout << endl;
f = true;
}
return 0;
}
答案 0 :(得分:5)
此:
while (!isspace(c = getchar()))
将继续前进,直到找到空格字符。如果最终输入值后没有空格,则getchar()
将返回EOF
,您将char
截断为isspace
并传递给isspace
,给出未定义的行为。有可能t
将返回false,并且您将永远循环,离开固定大小数组的末尾,直到您达到无法寻址的内存并导致分段错误。
使用前请务必检查输入。如果没有输入,您也会遇到大问题,因为您不会检查{{1}}是否已被成功阅读。