Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NOB2014 en 5 Febrero 2017, 14:28 pm



Título: Estructuras anidadas en lenguaje C. -
Publicado por: NOB2014 en 5 Febrero 2017, 14:28 pm
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. -

Código
  1. #include <stdio.h>
  2.  
  3. typedef struct {
  4. char texto[30];
  5. int tipo;
  6. } texto_t;
  7.  
  8. typedef struct{
  9. texto_t nombre;
  10. texto_t direccion;
  11. }alumno;
  12.  
  13. const char * TiposString[]={"el nombre","la direccion"};
  14.  
  15. void get_String( texto_t * NomDir );
  16.  
  17. int main( void ){
  18. alumno *ptrAlumno;
  19.  
  20. get_String( ptrAlumno->nombre );
  21. get_String( ptrAlumno->direccion );
  22.  
  23. return 0;
  24. }
  25.  
  26. void get_String( texto_t * NomDir ){
  27. printf("\n Ingresa %s del alumno ......:", TiposString[NomDir->tipo] );
  28. }
  29.  
  30. /*
  31. Para acceder/guardar al texto es:
  32.  
  33. NomDir->texto

Nos estamos leyendo. -


Título: Re: Estructuras anidadas en lenguaje C. -
Publicado por: ivancea96 en 5 Febrero 2017, 15:06 pm
Código
  1. void get_String( texto_t * NomDir );
Código
  1. get_String( ptrAlumno->nombre );

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


Y otra cosa importante:
Código
  1. alumno *ptrAlumno;

es un puntero a alumno, no un alumno. Tienes que reservar memoria:
Código
  1. 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)


Título: Re: Estructuras anidadas en lenguaje C. -
Publicado por: NOB2014 en 5 Febrero 2017, 18:06 pm
Hola.
Citar
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)
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. -

Código
  1. int main( void ){
  2. alumno *ptrAlumno = (alumno*) malloc(sizeof(alumno));
  3.  
  4. get_String( &ptrAlumno->nombre );
  5.  
  6. // ptrAlumno->texto_t->tipo = 1;
  7. get_String( &ptrAlumno->direccion );
  8.  
  9. free( ptrAlumno );
  10. return 0;
  11. }

Desde ya muchas gracias. -


Título: Re: Estructuras anidadas en lenguaje C. -
Publicado por: ivancea96 en 5 Febrero 2017, 18:42 pm
El campo de la estructura no se llama "texto_t". Se llama "nombre" o "direccion", según cual quieras.
Código
  1. ptrAlumno->nombre.tipo = 1;
Además, "tipo" no es un puntero, as´ñi que pones "." en vez de "->".