web-dev-qa-db-fra.com

Utilisation de memcpy en C ++

Je suis peu confus sur les paramètres de la fonction memcpy . Si j'ai

int* arr = new int[5];

int* newarr = new int[6];

et je veux copier les éléments de arr dans newarr en utilisant memcopy,

memcpy(parameter, parameter, parameter)

Comment puis-je faire cela?

9
DSP_Student

Donc, l'ordre est memcpy(destination, source, number_of_bytes).

Par conséquent, vous pouvez placer les anciennes données au début de newarr avec

memcpy(newarr, arr, 5 * sizeof *arr);
/* sizeof *arr == sizeof arr[0]  == sizeof (int) */

ou à la fin avec

memcpy(newarr+1, arr, 5 * sizeof *arr);

Parce que vous connaissez le type de données de arr et newarr, l'arithmétique des pointeurs fonctionne. Mais dans memcpy, il ne connaît pas le type, il doit donc connaître le nombre d'octets.

Une autre alternative est std::copy ou std::copy_n.

std::copy_n(arr, 5, newarr);

Pour les types fondamentaux comme int, la copie au niveau du bit effectuée par memcpy fonctionnera correctement. Pour les instances de classe réelles, vous devez utiliser std::copy (ou copy_n) afin que l'opérateur d'affectation personnalisé de la classe soit utilisé.

23
Ben Voigt
memcpy(dest,src,size)
dest -to which variable 
src - from which variable
size - size of src varible

int* arr = new int[5];    //source
int* newarr = new int[6];  // destination

for(int i = 0;i<5;i++) {arr[i] = i * 3;printf("  %d  ",arr[i]);}
memcpy(newarr,arr,sizeof(int)* 5);
for(int i = 0;i<5;i++) printf("%d",newarr[i]);
1
Pratap