копировать память, начиная со смещения позиции

как скопировать память, начиная с заданного смещения. Например

int main()
{
   int a1[100], a2[100], i;
   errno_t err;

   // Populate a2 with squares of integers
   for (i = 0; i < 100; i++)
   {
      a2[i] = i*i;
   }

   // Tell memcpy_s to copy 10 ints (40 bytes), giving
   // the size of the a1 array (also 40 bytes).
   err = memcpy_s(a1, sizeof(a1), a2, 10 * sizeof (int) );    
   if (err)
   {
      printf("Error executing memcpy_s.\n");
   }
   else
   {
     for (i = 0; i < 10; i++)
       printf("%d ", a1[i]);
   }
   printf("\n");
}

Как скопировать память из a2 в a1, начиная с индекса 50 из a1.

заранее спасибо


person TrustyCoder    schedule 16.08.2012    source источник


Ответы (2)


Добавьте 50 к a1. Не нужно возиться с sizeof для добавления; компилятор знает, как это сделать.

person Pete Becker    schedule 16.08.2012
comment
не могли бы вы показать мне фрагмент кода. если char * data является переменной назначения. - person TrustyCoder; 17.08.2012
comment
err = memcpy_s(a1 + 50, 50 * sizeof(*a1), a2, 10 * sizeof (int) ); Я не заметил, что исходный код использовал memcpy_s; для этого вам также необходимо настроить размер целевого буфера. - person Pete Becker; 17.08.2012

Передайте адрес индексу, в который вы хотите скопировать, в качестве места назначения memcpy:

memcpy(&a1[50], &a2[50], 10 * sizeof a[0]);
person eq-    schedule 16.08.2012
comment
Или, что то же самое, a1 + 50, a2 + 50. - person ; 17.08.2012
comment
@дельнан, да. Тем не менее, я лично предпочитаю то, как я написал. - person eq-; 17.08.2012