Использование метода memcpy

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

void Memcpy( void *from, void *to, int dimension, int length ) {

   if(dimension == sizeof(char)){
      char *copyFrom = (char *)from;
      char *copyTo = (char *)to;

      for(int i = length; i < length; i++)
         copyTo[i] = copyFrom[i];
   }


   if(dimension == sizeof(int)){
      int *copyFrom = (int *)from;
      int *copyTo = (int *)to;

      for(int i = length; i < length; i++)
         copyTo[i] = copyFrom[i];
   }
}

{Спасибо за помощь =)}


person John J    schedule 11.04.2018    source источник
comment
Добро пожаловать в СО. Вы забыли указать, где вы застряли. В чем именно ваша проблема? Покажите нам свои текущие усилия для функции копирования, и мы поможем решить проблему.   -  person Gerhardh    schedule 11.04.2018
comment
На самом деле, memcpy выполняет эту работу.   -  person Stan    schedule 11.04.2018
comment
Вы пытаетесь воссоздать memcpy?   -  person Ben    schedule 11.04.2018
comment
Да, но без использования   -  person John J    schedule 11.04.2018
comment
Вы уже прочитали codereview.stackexchange.com/questions/41094/ и stackoverflow.com/questions/17591624/ ?   -  person Bob__    schedule 11.04.2018
comment
Боб__, большое спасибо. Это было то, что я хотел найти!!!!   -  person John J    schedule 11.04.2018
comment
@Bob__, Спасибо!!!   -  person John J    schedule 11.04.2018


Ответы (1)


То, что вы хотите, действительно достигается с помощью memcpy, нет необходимости изобретать его заново. Для вашего удобства вы можете обернуть его copy_of_array или даже обернуть copy_of_array copy2 (при условии, что массивы распределены статически).

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

#define copy2(src, dst, count, shift) copy_of_array(src, dst, count, sizeof(src[0]), shift)

copy_of_array (void * src,
               void * dst,
               int    count,
               int    elem_size,
               int    shift)
{
  memcpy (dst, (char*)src + elem_size * shift, count * elem_size);
}

int main() {
  int i;
  int ione[4] = { 1, 2, 3, 4};
  int itwo[2] = { 0, 0 };
  char cone[4] = { 'a', 'b', 'c', 'd'};
  char ctwo[2] = { 'x', 'y' };
  copy_of_array(ione, itwo, 1, sizeof(int), 3);
  for (i=0; i<2; i++ )
    printf("%d ", itwo[i] );

  copy2(cone, ctwo, 1, 3);
  for (i=0; i<2; i++ )
    printf("%c ", ctwo[i] );
}
person Alexander Dmitriev    schedule 11.04.2018