用 scanf 在 C 中填充巨大的数组
Populate huge array in C with scanf
假设我的程序必须接收 2 个输入:
第一个对应于数组的大小,
第二个输入对应于数组的元素,由单个白色分隔 space.
即(输入):
- 4
- 1 2 3 4
所以我必须用 1,2,3,4 作为元素来填充大小为 n=4 的数组。
现在,我通常的做法是:
int *vector=malloc(n*sizeof(int));
for(int i=0; i<n; i++){
scanf("%d", &vector[i]);
}
这适用于较小的 n 值(如 1000)。但是,当我为 n=100 万,甚至 100.000 之类的东西做这件事时,那根本行不通。它陷入了无限循环。
那么,还有另一种方法可以使用 scanf(或 fgets 或任何其他函数)填充数组吗?
忽略性能不如预期的事实,您没有考虑以下情况:
在 C 和 C++ 中,您有这些要求
signed char: -2^07+1 to +2^07-1
short: -2^15+1 to +2^15-1
int: -2^15+1 to +2^15-1
long: -2^31+1 to +2^31-1
long long: -2^63+1 to +2^63-1
这意味着:
您的代码
for(int i=0; i<n; i++){
scanf("%d", &vector[i]);
}
确实有效,但如果您将 n 值设置得非常大,那么它会产生溢出,您将陷入无限循环...
假设我的程序必须接收 2 个输入: 第一个对应于数组的大小, 第二个输入对应于数组的元素,由单个白色分隔 space.
即(输入):
- 4
- 1 2 3 4
所以我必须用 1,2,3,4 作为元素来填充大小为 n=4 的数组。 现在,我通常的做法是:
int *vector=malloc(n*sizeof(int));
for(int i=0; i<n; i++){
scanf("%d", &vector[i]);
}
这适用于较小的 n 值(如 1000)。但是,当我为 n=100 万,甚至 100.000 之类的东西做这件事时,那根本行不通。它陷入了无限循环。 那么,还有另一种方法可以使用 scanf(或 fgets 或任何其他函数)填充数组吗?
忽略性能不如预期的事实,您没有考虑以下情况:
在 C 和 C++ 中,您有这些要求
signed char: -2^07+1 to +2^07-1 short: -2^15+1 to +2^15-1 int: -2^15+1 to +2^15-1 long: -2^31+1 to +2^31-1 long long: -2^63+1 to +2^63-1
这意味着:
您的代码
for(int i=0; i<n; i++){
scanf("%d", &vector[i]);
}
确实有效,但如果您将 n 值设置得非常大,那么它会产生溢出,您将陷入无限循环...