Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: RRjavier21 en 17 Abril 2019, 13:42 pm



Título: duda con "void pointer" (En C)
Publicado por: RRjavier21 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.


Título: Re: duda con "void pointer" (En C)
Publicado por: CalgaryCorpus 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.


Título: Re: duda con "void pointer" (En C)
Publicado por: RRjavier21 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?


Título: Re: duda con "void pointer" (En C)
Publicado por: CalgaryCorpus 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*