【问题标题】:How to join 2 arrays into a third one?如何将 2 个阵列加入第三个阵列?
【发布时间】:2021-11-29 13:44:59
【问题描述】:

我想将a1a2 添加到第三个数组a3。但是,它无法正常工作。

运行以下代码时,输​​出为:

1 2 3 4 5 5 88237492 23928392 23234242 343344.

这是为什么呢?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 30
int main(){
  int a1[]={1,2,3,4,5};
  int a2[]={1,2,3,4,5};
  int a3[10];
  int i=0;
  int k=0;
  int j=0;
  
  while(i<sizeof(a1)/sizeof(int))
  {
    a3[i]=a1[i];
    i++;
  }

  while(j<sizeof(a2)/sizeof(int))
  {
    a3[i]=a2[j];
    j++;
  }
  while(k<sizeof(a3)/sizeof(int))
  {
    printf("%d ",a3[k]);
    k++;
  }        

  return 0;
}

【问题讨论】:

  • 您忘记 (?) 在第二个 while 循环(使用 j 索引的循环)中增加 i
  • 在第二个 while 循环中,在增加 j (j++) 之后尝试增加 i (i++)
  • 调试失败:(您应该学习如何使用调试器,或者至少了解您可以打印出重要变量的值,例如数组索引。

标签: arrays c algorithm for-loop indexing


【解决方案1】:

问题是关于joining two array's into third one。如果您想要一个有效的替代方案,您可以使用 memcpy()string.h 头文件中直接复制每个数组的内存。但是您应该非常小心如何使用它,因为您可能会覆盖任何其他可能导致segmentation fault 的现有数据。请在下面找到完整的实现。

#include<stdio.h>
#include<string.h>

int main()
{
    int a1[] = {1, 2, 3, 4, 5};
    int a2[] = {6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
    int a3[17] = {0}; //initializes all elements to 0.

    //make a3
    memcpy(a3, a1, sizeof(a1));
    memcpy(&a3[sizeof(a1)/sizeof(int)], a2, sizeof(a2));

    //print a3
    for(int i=0; i<sizeof(a3)/sizeof(int); i++)
        printf("%d\n", a3[i]);

    return 0;
}

【讨论】:

    【解决方案2】:

    我认为其他人已经回答了这个问题,但我想再添加一件事来帮助您。正如您使用int a3[10] = {} 声明的数组一样。这将用零初始化您的数组。然后就很容易调试了。

    如果您使用了这种格式,那么您的程序的输出将是[1,2,3,4,5,5,0,0,0,0],因此在 5 个值未分配之后,调试变得很容易。所以它很容易可视化并且会节省时间。

    【讨论】:

      【解决方案3】:

      看看你的第二个循环。您反复将a2 的值分配给a3[5]i 停留在 5)。 a3 的其余部分仍未初始化,因此存在奇怪的值。

      您可能还想为这类事情使用 for 循环

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-15
        • 2018-11-02
        • 2015-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多