Проблема в memcpy с использованием не-char данных в качестве параметров! - PullRequest
2 голосов
/ 16 сентября 2010

Следующая программа не выводит нужные данные (на компиляторе VC2008)

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

int main(void)
{
    int i;
    int dest[10] = {1};
    int src [] = {2, 3, 4, 5, 6};

    memcpy(dest, src, 5);
    for (i=0; i<10; i++) printf("%i\n", dest[i]);

    return 0;
}

тогда как при использовании char массивов все идет хорошо! в чем здесь проблема?

Ответы [ 6 ]

12 голосов
/ 16 сентября 2010

memcpy для копирования занимает несколько байтов, а не количество объектов.

 memcpy(dest,src,5*sizeof(dest[0]))
3 голосов
/ 16 сентября 2010

memcpy копирует только байты.вам нужно указать количество копируемых байтов, умножив количество объектов на размер каждого объекта следующим образом:

memcpy(dest, src, 5 * sizeof(int));
1 голос
/ 16 сентября 2010

Вы хотите вызвать memcpy с sizeof( x ), где «x» обозначает объект.Здесь вы бы сделали

memcpy( dest, src, 5*sizeof(int) );
1 голос
/ 16 сентября 2010

Вам необходимо добавить sizeof(int):

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

int main(void)
{
    int i;
    int dest[10] = {1};
    int src [] = {2, 3, 4, 5, 6};

    memcpy(dest, src, sizeof(int) * 5);
    for (i=0; i<10; i++) printf("%i\n", dest[i]);

    return 0;
}
1 голос
/ 16 сентября 2010

Попробуйте memcpy(dest,scr,sizeof(int)*5)

0 голосов
/ 17 сентября 2010

Лучше

memcpy( dest, src, 5*sizeof*src) );

Если вы измените тип массива на другой тип, код должен не измениться.

...