使用scanf在C中填充大数组

时间:2016-04-02 20:37:36

标签: c arrays input scanf populate

假设我的程序必须接收2个输入: 第一个对应于数组的大小, 第二个输入对应于数组的元素,由一个空格分隔。

即。 (输入):

  • 4
  • 1 2 3 4

所以我必须填充一个大小为n = 4的数组,其中1,2,3,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或任何其他函数)填充数组的方法?

1 个答案:

答案 0 :(得分:0)

忽略性能不如预期的事实,您没有考虑以下事项:

在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 值设置得非常大,那么它会产生溢出,你会在无限循环中堆叠......