elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  (void *) en funciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (void *) en funciones  (Leído 5,332 veces)
Shon

Desconectado Desconectado

Mensajes: 34


Ver Perfil
(void *) en funciones
« en: 24 Enero 2011, 22:31 pm »

Una pregunta muy básica pero que no me termino de aclarar:

veo en muchos códigos que hacen cosas como esta:

Código
  1. memset((char *)&estructura, '\0', sizeof(estructura));  // Por poner un ejemplo
  2.  

La función memset tiene este prototipo:

Código
  1. #include <string.h>
  2.  
  3. void *memset(void *s, int c, size_t n);
  4.  
  5.  

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:

Código
  1. memset((void *)&estructura, '\0', sizeof(estructura));  // Por poner un ejemplo
  2.  

En lugar de loq ue hay escrito más arriba.

Gracias ;)


En línea

negux

Desconectado Desconectado

Mensajes: 63


Ver Perfil
Re: (void *) en funciones
« Respuesta #1 en: 25 Enero 2011, 00:54 am »

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

alomejor por eso hacen eso


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: (void *) en funciones
« Respuesta #2 en: 25 Enero 2011, 02:39 am »

¡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!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Shon

Desconectado Desconectado

Mensajes: 34


Ver Perfil
Re: (void *) en funciones
« Respuesta #3 en: 25 Enero 2011, 14:09 pm »

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
En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: (void *) en funciones
« Respuesta #4 en: 25 Enero 2011, 16:06 pm »

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
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Recursividad con funciones void, ayuda
Java
LiLou 1 3,984 Último mensaje 3 Abril 2011, 10:51 am
por LiLou
funciones INT vs VOID « 1 2 »
Programación C/C++
ALONSOQ 14 7,266 Último mensaje 4 Septiembre 2012, 16:49 pm
por ALONSOQ
Dudas sobre las funciones void en C « 1 2 »
Programación C/C++
niñoAtómico 11 5,628 Último mensaje 11 Octubre 2013, 22:41 pm
por vangodp
COMO DIVIDIR MI CODIGO EN FUNCIONES(VOID)
Programación C/C++
silfer_1908 1 1,875 Último mensaje 25 Octubre 2018, 00:28 am
por huchoko
Funciones void en python
Scripting
SERGIO_@PRENDE 1 3,107 Último mensaje 27 Septiembre 2021, 07:25 am
por Danielㅤ
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines