Как скопировать одномерный массив в часть другого двумерного массива и наоборот? - PullRequest
0 голосов
/ 05 июля 2011

По сути, у меня есть три массива: CQueue (2D-массив), PQueue (2D-массив, такое же количество массивов, что и CQueue, но каждый массив содержит в два раза больше значений) и CC (стандартный массив, который долго, как массив в CQueue). Чего я хочу добиться, так это взять определенный массив в CQueue, скопировав его так, чтобы CC читал точно так же, как CQueue, и чтобы первая половина эквивалентного массива в PQueue также читала то же самое.

Мне посоветовали использовать memcpy от друга, что выглядело нормально, но не устранило проблему. Я не знаю, заключается ли проблема во мне, потенциально использующей memcpy неправильно, или есть другая проблема под рукой. Ниже приводится упрощенная версия соответствующей части кода.

int (main)
{
  int CQueue[numberOfArrays][halfSize]
  int PQueue[numberOfArrays][size]
  int CC[halfSize]

  for (i = 0; i < numberOfArrays]; i++)
  {
    memcpy (CC, CQueue[i], halfSize)
    memcpy (PQueue[i], CQueue[i], size)
  }
}

Буду признателен за любую помощь, спасибо!

Ответы [ 2 ]

1 голос
/ 05 июля 2011

Третий аргумент memcpy - это сумма, которую нужно скопировать в символах (т.е. в байтах на большинстве платформ).Так что вам нужно сделать что-то вроде:

memcpy(CC, CQueue[i], halfSize*sizeof(*CC));
0 голосов
/ 05 июля 2011

memcpy копирует байты, а не целые. Вам нужно умножить количество копируемых элементов на размер каждого такого элемента

memcpy(dst, src, elems * sizeof elem);

в вашем коде

    memcpy (CC, CQueue[i], halfSize * sizeof *CC);
    memcpy (PQueue[i], CQueue[i], size * sizeof *PQueue[i]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...