Increasing array size dynamically in C

烂漫一生 提交于 2019-12-12 02:47:20

问题


I need to increase length of 2 arrays according to user input. I'm using the code below. But output is not matching with user input.

    #include<stdio.h>        
    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;
    }

When user inputs the values:

    35 4
    20 3
    40 1
    60 7
    20 8

Then this is the output:

    8  4
    20 3
    40 1
    60 7
    20 8

If length of array exceeded 4, the last element of the time array will be printed as the first element of the size array.

Why does my program give this output?


回答1:


Something to get you started.

Use realloc() to re-size the memory pointer to by a pointer.

#include <stdlib.h>        
#include <stdio.h>        

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;
}


来源:https://stackoverflow.com/questions/32619428/increasing-array-size-dynamically-in-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!