2016-09-30 1 views
0

J'essaye de memcpy d'un ptr à l'autre. Je connais la taille que je veux copier. Les pointeurs destination et source sont tous deux des pointeurs vides. Est-ce valide? Copie-t-il réellement le ELEMENT_SIZE (entier comme 128) de la source à la destination? Je sais que ce n'est pas la chose la plus idéale à faire. Mais je veux savoir si cela fonctionne.Comment fonctionne memcpy avec des pointeurs vides?

memcpy(to_add, element_ptr, ELEMENT_SIZE); 
+1

Oui cela fonctionne. Il se comporte de la même manière que les pointeurs de caractères en boucle sur ce nombre d'octets. –

+2

Pourquoi pensez-vous que cela ne fonctionnerait pas étant donné que 'memcpy' est défini pour accepter les pointeurs de vide? – kaylum

+0

Faites un essai. Si cela ne fonctionne pas, vous vous attendez à ce que cela fonctionne, revenez à SO avec un [mcve]. –

Répondre

0

Peu importe le pointeur. C'est un processus très simple d'avoir deux adresses de mémoire et d'engager une copie.

1

Description des paramètres pour memcpy de la documentation:

void * memcpy (void * destination, const void * source, size_t num);

destination: pointeur vers le tableau de destination où vous souhaitez copier le contenu, le type -casté à un pointeur de type void *.

source: Pointeur vers la source de données à copier, casté vers un pointeur de type const void *.

num: Nombre d'octets à copier. taille_t est un type intégral non signé.

memcpy prend simplement num octets à partir de l'adresse source et les copie à partir de l'adresse mémoire destination. Un pointeur est une adresse de mémoire de longueur fixe, quel que soit le type. Peu importe si le pointeur est char * (pointe vers des données de caractère), int * (pointe vers des données entières) ou void * (pointe vers des données de type inconnu), il pointe toujours juste vers la mémoire.

Étant donné que memcpy copie un nombre explicite d'octets, le type de données pointé sur n'est pas pertinent; il a juste besoin d'adresses mémoire pour les données.