Как объединить 2 массива в третий?

#arrays #c #algorithm #for-loop #indexing

Вопрос:

Я хочу добавить a1 и a2 в третий массив, 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;
}
 

Комментарии:

1. Вы забыли (?) увеличить i во втором while цикле (том, который использует j индекс).

2. Во втором цикле while попробуйте увеличить i (i ) также после увеличения j (j )

3. Ошибка отладки:( Вы должны научиться использовать отладчик или, по крайней мере, понять, что вы можете распечатать значения важных переменных, таких как индексы массивов.

Ответ №1:

Я думаю, что другие уже ответили на этот вопрос, но я хочу добавить еще одну вещь, которая может помочь вам в будущем. Как вы объявили, используя массив int a3[10] = {} . Это приведет к инициализации вашего массива нулями. Тогда это становится легко отлаживать.

Если вы использовали этот формат, то вывод вашей программы будет [1,2,3,4,5,5,0,0,0,0] таким, что станет легко отлаживать, что после 5 значений не присваиваются. Так что это легко визуализировать и сэкономит время.

Ответ №2:

Посмотрите на свою вторую петлю. Вы неоднократно присваиваете значения a2 to a3[5] ( i застряло на 5). Остальная часть a3 остается неинициализированной, отсюда и странные значения.

Вы также можете использовать циклы для такого рода вещей

Ответ №3:

Поскольку вопрос касается joining two array's into third one . Если вам нужна эффективная альтернатива, вы можете напрямую скопировать память каждого массива, используя memcpy() string.h файл заголовка from. Но вы должны быть очень осторожны в том, как вы его используете, так как вы можете перезаписать любые другие существующие данные, что может привести к 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(amp;a3[sizeof(a1)/sizeof(int)], a2, sizeof(a2));

    //print a3
    for(int i=0; i<sizeof(a3)/sizeof(int); i  )
        printf("%dn", a3[i]);

    return 0;
}