【问题标题】:Increasing array size dynamically in C在 C 中动态增加数组大小
【发布时间】:2015-09-16 21:55:04
【问题描述】:

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

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

当用户输入值时:

    35 4
    20 3
    40 1
    60 7
    20 8

那么这是输出:

    8  4
    20 3
    40 1
    60 7
    20 8

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

为什么我的程序会给出这个输出?

【问题讨论】:

  • 不是这样的。如果要分配可调整大小的数组,请查找 realloc()
  • 您认为代码的哪一部分定义了这些数组的初始大小,该大小是多少?你认为哪个部分改变了这个尺寸?
  • 此外,size[key] 和 time[key] 在 key 为零时声明,这意味着数组中没有可用的项目,它的大小为零。我希望你的程序崩溃
  • 如何使用 realloc() 函数?
  • 您使用realloc 来更改malloccalloc 分配的内存大小。

标签: c arrays dynamic-arrays


【解决方案1】:

让你开始的东西。

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

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

【讨论】:

    猜你喜欢
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多