Quelle est la différence entre memset et memcpy en C
Question
J'ai lu les en-têtes de fonction, mais je ne suis toujours pas sûr exactement ce que la différence est en termes de cas d'utilisation.
La solution
copies memcpy()
d'un endroit à l'autre. memset()
définit simplement tous les morceaux de mémoire à la même valeur.
Exemple:
memset(str, '*', 50);
La ligne ci-dessus définit les 50 premiers caractères de la chaîne str à * (ou ce second argument du memset).
memcpy(str2, str1, 50);
Les copies de la ligne au-dessus des 50 premiers caractères du str1 à str2.
Autres conseils
memset()
définit tous les octets dans le tampon spécifié à la même valeur, des copies de memcpy()
une séquence d'octets d'un autre endroit dans la mémoire tampon.
char a[4];
memset(a, 7, sizeof(char)*4);
/*
* a is now...
*
* +-+-+-+-+
* |7|7|7|7|
* +-+-+-+-+
*/
char b[] = {1,2,3,4};
char c[4];
memcpy(c, b, sizeof(char)*4);
/*
* c is now...
*
* +-+-+-+-+
* |1|2|3|4|
* +-+-+-+-+
*/
memset
définit un bloc de mémoire à une seule valeur. copies memcpy
le contenu d'un bloc dans un autre bloc.
Peut-être que vous seriez intéressé par la différence entre memcpy
et memmove
. Les deux font la même chose, mais celui-ci fonctionne même si la source et le chevauchement de destination.
memset()
est utilisé pour définir tous les octets dans un bloc de mémoire à une valeur char particulier. Memset joue aussi bien qu'avec char
car il est sa valeur d'initialisation.
copies memcpy()
octets entre la mémoire. Ce type de données copiées est hors de propos, il est tout simplement des copies octet par octet.
memset remplir mémoire avec octet constant
void * memset (s void *, int c, size_t n);
Utilisation de memset est programmeur peut directement remplir la mémoire avec en particulier. et les utilisations memcpy constante pointeur vide à la source qui ne peut pas être modifiée.
memcpy copie mémoire zone
void * memcpy (void * dest, const void * src, size_t n);
copies memcpy()
d'un endroit à l'autre. memset()
définit simplement tous les morceaux de mémoire au même.
Par exemple définit ici la longueur de chaîne de la chaîne str * (ou quel que soit le deuxième argument de la memset).
memset(str, '*', strlen(str)+1);
Ici copie la longueur de la chaîne de la chaîne src dest.
memcpy(dest, src, strlen(src)+1);