Test Foro de elhacker.net SMF 2.1

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. -

#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. -
Título: Re: Estructuras anidadas en lenguaje C. -
Publicado por: ivancea96 en 5 Febrero 2017, 15:06 PM
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)
Título: Re: Estructuras anidadas en lenguaje C. -
Publicado por: NOB2014 en 5 Febrero 2017, 18:06 PM
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. -
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.
ptrAlumno->nombre.tipo = 1;
Además, "tipo" no es un puntero, as´ñi que pones "." en vez de "->".