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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  duda con "void pointer" (En C)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda con "void pointer" (En C)  (Leído 2,455 veces)
RRjavier21

Desconectado Desconectado

Mensajes: 6


Ver Perfil
duda con "void pointer" (En C)
« en: 17 Abril 2019, 13:42 pm »

Hola, tengo un pequeño problema de la utilizacion del void*

tengo este struct:

Código
  1. typedef struct{
  2. void* cad1;
  3. void* cad2;
  4. void* cad3;
  5. }info;
  6.  

y dentro del main llamo a la siguiente funcion que me da problemas y no se como implentar:
(deberia retornar un struct info)

Código
  1. void* obtener_info(char* total){
  2. info *nuevo;
  3. nuevo=(info*)malloc(sizeof(info));
  4. int aux1;
  5. int aux2;
  6. int aux3;
  7. sscanf(total,"%d %d %d",&aux1,&aux2,&aux3);
  8. nuevo->cad1=aux1;
  9. nuevo->cad2=aux2;
  10. nuevo->cad3=aux3;
  11. return nuevo;
  12. }
  13.  

Quizas tenga multiples errores, agradeceria cualquier ayuda.
PD. el struct tiene que que ser con void* ya que no siempre son enteros.


« Última modificación: 17 Abril 2019, 13:48 pm por RRjavier21 » En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: duda con "void pointer" (En C)
« Respuesta #1 en: 17 Abril 2019, 15:46 pm »

Para poder asignarle a esos campos, necesitas direcciones de memoria, no valores.
En C++ podrias hacer:

Código
  1. nuevo->cad1 = new int(aux1);

En C, tienes que pedir memoria con malloc, asignar a esa memoria, luego asignarle a cad1 la memoria.

Código
  1.    int *pint = (int*) malloc(sizeof(int));
  2.    *pint = aux1;
  3.    nuevo->cad1 = pint;
  4.  

Me pregunto como haras para saber de que tipo son los valores que asignaste para luego recuperar su valor?

Tal vez conviene saber que quieres hacer con estos campos de tipo desconocido porque posiblemente se puede resolver sin tener que hacer esto.


En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
RRjavier21

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: duda con "void pointer" (En C)
« Respuesta #2 en: 17 Abril 2019, 16:41 pm »


Tal vez conviene saber que quieres hacer con estos campos de tipo desconocido porque posiblemente se puede resolver sin tener que hacer esto.

Estoy trabajando con funciones como parámetros, entonces segun que funcion llamo se que dato contiene.
Se que esto se puede hacer sin los void* pero quiero aprender a utilizarlo ya que es una herramienta util por lo que no creo que cambie la estructura del programa.

Tengo una duda, si la funcion "void* obtener_info" retorna un void*
¿A que tipo de variable le debo asignar el retorno para poder acceder a los campos de struct que creo la función?
En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: duda con "void pointer" (En C)
« Respuesta #3 en: 17 Abril 2019, 16:56 pm »

Hay una ventaja que tiene usar tipos y es que el compilador te ayuda a chequear que los datos que pasas calzan con los que esperas y al usar void* abres la puerta a una serie de problemas que se producen cuando no hay calce.

El hecho que la funcion te indique el tipo de parametro no es ninguna garantia que el tipo guardado sea el que esperas.

No tiene sentido que tu funcion retorne un void* si estas retornando un info *.
Cambia el tipo de retorno a info*
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines