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