duda con "void pointer" (En C)

Iniciado por RRjavier21, 17 Abril 2019, 13:42 PM

0 Miembros y 1 Visitante están viendo este tema.

RRjavier21

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

tengo este struct:


typedef struct{
void* cad1;
void* cad2;
void* cad3;
}info;


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


void* obtener_info(char* total){
info *nuevo;
nuevo=(info*)malloc(sizeof(info));
int aux1;
int aux2;
int aux3;
sscanf(total,"%d %d %d",&aux1,&aux2,&aux3);
nuevo->cad1=aux1;
nuevo->cad2=aux2;
nuevo->cad3=aux3;
return nuevo;
}


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

CalgaryCorpus

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

Código (cpp) [Seleccionar]
nuevo->cad1 = new int(aux1);

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

    int *pint = (int*) malloc(sizeof(int));
    *pint = aux1;
    nuevo->cad1 = pint;


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.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

RRjavier21

Cita de: CalgaryCorpus en 17 Abril 2019, 15:46 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?

CalgaryCorpus

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*
Aqui mi perfil en LinkedIn, invitame un cafe aqui