在C中动态增加数组大小

我需要根据用户输入增加2个数组的长度。 我正在使用下面的代码。 但输出与用户输入不匹配。

#include int main() { int i=0, key=0, size[key], time[key]; while (key!=-1) { printf("Insert value for size : "); scanf("%d",&size[i]); printf("Insert value for time : "); scanf("%d",&time[i]); i++; printf("Run again Press-1 or Exit : "); scanf("%d",&key); } int x=0; for (x ; x<i ; x++) { printf("%d %d\n",size[x],time[x]); } return 0; } 

当用户输入值时:

  35 4 20 3 40 1 60 7 20 8 

然后这是输出:

  8 4 20 3 40 1 60 7 20 8 

如果数组的长度超过4,则time数组的最后一个元素将作为size数组的第一个元素打印。

为什么我的程序会提供此输出?

一些让你入门的东西。

使用realloc()通过指针重新调整内存指针的大小。

 #include  #include  int main(void) { // Start with NULL and a size of 0 int *my_time = NULL; size_t sz = 0; while (!some_exit_condition) { long long ll; printf("Insert value for size : "); if (scanf("%lld", &ll) != 1) { puts("Numeric input missing"); break; } if (ll < 0 || ll > SIZE_MAX) { puts("Size out of range"); break; } sz = (size_t) ll; void *new_ptr = realloc(my_time, sz * sizeof *my_time); if (new_ptr == NULL && sz != 0) { puts("Out of memory"); break; } my_time = new_ptr; // do something with `my_time` and `sz` } // Clean-up free(my_time); my_time = NULL; sz = 0; return 0; }