Estructuras anidadas en lenguaje C. -

Iniciado por NOB2014, 5 Febrero 2017, 14:28 PM

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

NOB2014

Hola, buen día. -
Necesito una ayudita, encontré este código, pero no logro interpretarlo del todo, el propósito es que en la función get_String en la primera llamada aparezca "el nombre" y en la segunda "la dirección" en TiposString[NomDir->tipo], el caso es que por más que leo los errores no puedo hacer que compile. -
Ya logre lo mismo pasando un parametro a la función, pero me interesaría poder hacerlo de esta manera. -

#include <stdio.h>

typedef struct {
char texto[30];
int tipo;
} texto_t;
     
typedef struct{
texto_t nombre;
texto_t direccion;
}alumno;

const char * TiposString[]={"el nombre","la direccion"};

void get_String( texto_t * NomDir );

int main( void ){
alumno *ptrAlumno;

get_String( ptrAlumno->nombre );
get_String( ptrAlumno->direccion );

return 0;
}

void get_String( texto_t * NomDir ){
printf("\n Ingresa %s del alumno ......:", TiposString[NomDir->tipo] );
}

/*
Para acceder/guardar al texto es:

NomDir->texto


Nos estamos leyendo. -
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

ivancea96

void get_String( texto_t * NomDir );
get_String( ptrAlumno->nombre );

ptrAlumno->nombre no es texto_t*, es texto_t. para pasarle la dirección de memoria, el operador &:
get_String( &ptrAlumno->nombre );


Y otra cosa importante:
alumno *ptrAlumno;

es un puntero a alumno, no un alumno. Tienes que reservar memoria:
alumno *ptrAlumno = (alumno*) malloc(sizeof(alumno));

Y un detalle más. Cuando sea así, postea el error. Este era un código corto, pero en códigos largos, sin el error, puede ser complicado ver el problema (y no siempre vamos a compilar nosotros el código para ver los errores)

NOB2014

Hola.
CitarY un detalle más. Cuando sea así, postea el error. Este era un código corto, pero en códigos largos, sin el error, puede ser complicado ver el problema (y no siempre vamos a compilar nosotros el código para ver los errores)
mil disculpas lo voy a tener en cuenta, ahora les pido un empujoncito mas, no puedo acceder al campo tipo de la estructura texto_t, me podrían indicar como se hace ;D. -

int main( void ){
alumno *ptrAlumno = (alumno*) malloc(sizeof(alumno));

get_String( &ptrAlumno->nombre );

// ptrAlumno->texto_t->tipo = 1;
get_String( &ptrAlumno->direccion );

free( ptrAlumno );
return 0;
}


Desde ya muchas gracias. -
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

ivancea96

El campo de la estructura no se llama "texto_t". Se llama "nombre" o "direccion", según cual quieras.
ptrAlumno->nombre.tipo = 1;
Además, "tipo" no es un puntero, as´ñi que pones "." en vez de "->".