¿Cuál es la diferencia entre memset y establecimiento de memoria en C
Pregunta
He leído las cabeceras de función, pero todavía no estoy seguro de qué es exactamente la diferencia es en términos de casos de uso.
Solución
copias memcpy()
de un lugar a otro. memset()
justamente establece que todas las piezas de la memoria en el mismo valor.
Ejemplo:
memset(str, '*', 50);
La línea anterior establece los primeros 50 caracteres de la cadena str a * (o lo que sea segundo argumento de la memset).
memcpy(str2, str1, 50);
La línea anterior copia los primeros 50 caracteres de str1 a str2.
Otros consejos
memset()
establece todos los bytes en el búfer especificado en el mismo valor, las copias memcpy()
una secuencia de bytes de otro lugar en la memoria intermedia.
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
establece un bloque de memoria a un solo valor. copias memcpy
el contenido de un bloque en otro bloque.
Tal vez usted estaría interesado en la diferencia entre memcpy
y memmove
. Ambos hacen lo mismo, pero éste funciona incluso si la fuente y el destino se solapan.
memset()
se utiliza para configurar todos los bytes en un bloque de memoria a un valor Char particular. También Memset sólo juega bien con char
ya que es su valor de inicialización.
copias memcpy()
bytes entre la memoria. Este tipo de datos que se copian es irrelevante, sólo hace que el byte por byte copias.
memset llenar memoria con el byte constante
void * memset (void * s, int c, size_t n);
El uso de memset es programador puede llenar directamente con la memoria en particular. y los usos memcpy constante vacío puntero a la fuente de la que no se puede cambiar.
memcpy copia del memoria área
void * memcpy (void * dest, const void * src, size_t n);
copias memcpy()
de un lugar a otro. memset()
justamente establece que todas las piezas de la memoria a la misma.
Por ejemplo, aquí establece longitud de la cadena de la cadena str a * (o lo que sea segundo argumento de la memset).
memset(str, '*', strlen(str)+1);
A continuación, copia la longitud de la cadena de la cadena src a dest.
memcpy(dest, src, strlen(src)+1);