【问题标题】:How can I concat two dynamic int-arrays in C?如何在 C 中连接两个动态 int 数组?
【发布时间】:2019-06-07 19:03:53
【问题描述】:

我的问题是将两个动态分配的 int 数组连接到其中一个。 从逻辑上我猜它应该可以工作......

我建议函数里面的realloc(...)是错误的。 我也在函数之外尝试过,但它也不起作用。

void concatArrays(int *numbers1, int length1, int *numbers2, int length2)
{
  numbers1 = realloc(numbers1, (length1+length2) * sizeof(int));

  int counter = 0;
  for(int i = length1; i<(length1+length2); i++)
  {
    numbers1[i] = numbers2[counter];
    counter++;
  }
}

现在在main() 中,我填充了两个数组,至少我想打印出新的更长的数组(numbers1)。

int main()
{
  int length1 = 5;
  int *numbers1 = malloc(length1 * sizeof(int));

  // fill array1
  . . .

  int length2 = 4;
  int *numbers2 = malloc(length2 *sizeof(int));

  // fill array2
  . . .

  concatArrays(numbers1, length1, numbers2, length2);


  // print out "new" array (numbers1)
  int new_len = length1 + length2;
  for(int i = 0; i<new_len; i++)
  {
    printf("%d ", numbers1[i]);
  }

  free(numbers1);
  free(numbers2);
}

提前感谢您的所有建议!

【问题讨论】:

  • 要做的步骤:创建第三个(目标)数组,大到足以容纳两个数组中的值。将第一个复制到目标数组,将第二个复制到目标数组(带有偏移量)。您可能想使用memcpy 或其派生词。请记住,所有分配的内存都需要在某处释放。

标签: c arrays dynamic merge concat


【解决方案1】:

realloc() (通常)返回一个新指针,除非新大小仅稍大一些并且可以放入过度分配的数组中。您没有将新指针“numbers1”传递回调用函数。

【讨论】:

    猜你喜欢
    • 2013-12-29
    • 2010-12-14
    • 2015-04-23
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2012-09-23
    相关资源
    最近更新 更多