Una pregunta muy básica pero que no me termino de aclarar:
veo en muchos códigos que hacen cosas como esta:
memset((char *)&estructura, '\0', sizeof(estructura)); // Por poner un ejemplo
La función memset tiene este prototipo:
#include <string.h>
void *memset(void *s, int c, size_t n);
Yo entiendo que se ponga void * s, porque así la hacemos más generica que poniendo por ejemplo char. Pero cuando la invocamos, no deberiamos de hacer esto:
memset((void *)&estructura, '\0', sizeof(estructura)); // Por poner un ejemplo
En lugar de loq ue hay escrito más arriba.
Gracias ;)
Encontre esto:
Copia el valor de c (convertido a unsigned char) en cada uno de los primeros n caracteres en el objeto apuntado por s.
http://c.conclase.net/librerias/?ansifun=memset (http://c.conclase.net/librerias/?ansifun=memset)
alomejor por eso hacen eso
¡Buenas!
Si quieres puedes hacer el cast a void*, pero recuerda que en C se le puede asignar sin ningun problema cualquier tipo de puntero o direccion de memoria a un puntero a void. En cambio, para hacerlo a la inversa (pasar de void* a otro tipo) si que tienes que indicar explicitamente la conversion.
¡Saludos!
Gracias chicos!!
daniel, pero mirando el prototipo pone (void *), por lo que no me parece lógico, ya que esa conversión a char se debería de hacer dentro de la función y no ser tarea del usuario de dicha función, eso creo yo (si me estoy colando, plis un tirón de orejas jajaj).
un saludo
No es tarea del usuario de dicha función porque en el caso que planteas el cast ni siquiera es necesario.
Se utiliza el puntero void no solo para que la función sea genérica en cuanto a los parámetros que recibe si no que también es genérica en su funcionamiento; memset desconoce los tipos de datos utilizados ni los necesita.
Saludos