Autor: Fernando Hevia Fecha: A: 'Lista de desarrollo de software libre' Asunto: Re: [Grulic-dev] estructuras
> -----Mensaje original-----
> De: grulic-dev-bounces@???
> [mailto:grulic-dev-bounces@???] En nombre de Leonardo Rios
> Enviado el: Miércoles, 30 de Abril de 2008 11:25
> Para: Lista de desarrollo de software libre
> Asunto: [Grulic-dev] estructuras
>
> Hola chicos,
> Vamos con este tema.. intentando pasar una estructura entre
> funciones, me he colgado en lo siguiente:
>
> Tengo una estructura (donde guardo el nombre de usuario)
> definida en <network.h> int n_user; struct struc_user {
>
> int *number_user;
> char username[100];
>
> } users[100];
>
> y quiero pasar esta estructura con users[n_user].username
> desde el archivo <server.c> al archivo <check.c> de la forma:
>
> <server.c>
> printf("Ingrese el nick");
> fgets(users[n_user].usernam, sizeof(users[n_user].username), stdin);
> minus(users[user].username); /* esta en chech.c */
> comprobacion(users[user].username); /* esta en chech.c */
> printf("PASO OK %s\n", users[user].username); /*
> objetivo */
>
> <check.c>
> void minus(users[user].username) /* trasforma de
> mayusculas a minus.*/
> {
>
> char *p = users[user].username;
>
> for (p = users[user].username; *p; ++p) {
> *p = tolower(*p);
>
> }
>
> return 0;
> }
>
> void comprobacion(users[user].username) /* comprueba si
> el nick > 10 */
> {
> if (strlen(users[user].username) > 10) {
>
> printf ("El usario que ha
> intentado conectarse "
> "supera los 10 caracteres\n");
> return 1;
> }
>
> return 0;
>
> }
>
> Preguntas: - en network.h tengo que declarar prototipos de la
> fc minus & comprobacion:
> void minus(users[n_user].username);
> void comprobacion(users[n_user].username);
>
> Pero me dio error al compilar:
>
> network.h:6: error: expected ')' before '[' token
> network.h:7: error: expected ')' before '[' token
>
> - en las funciones les mande void
> minus(users[user].username), pero en realidad es una
> estructura lo que le paso a estas 2 funciones
>
>
El error que te está dando el compilador se debe a que no interpreta a
"users[n_user].username" como un tipo de dato válido. En la _declaración_
tenés que poner únicamente el tipo de dato que esta función espera y vos
estás poniendo la variable que usas en tu programa.
Esta mal la declaración de minus() y comprobacion(). Ambas esperan un char *
como parametro. Pensá conceptualmente en que la función minus debe servir
para pasar _cualquier_ string a minusculas y no solo el username. Ergo la
definición será:
int minus(char *);
int comprobacion(char *);
Fijate tambien que a ambas funciones las declaras como que retornan void,
pero adentro retornas un entero.
Por último, tengo la fuerte sospecha que la declaración de number_user como
puntero en la estructura struc_user es un error. ¿En qué pensas usar ese
campo?