用 scanf 在 C 中填充巨大的数组

Populate huge array in C with scanf

假设我的程序必须接收 2 个输入: 第一个对应于数组的大小, 第二个输入对应于数组的元素,由单个白色分隔 space.

即(输入):

所以我必须用 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 值设置得非常大,那么它会产生溢出,您将陷入无限循环...