Upper Posted December 2, 2009 at 04:34 PM Report Share #298401 Posted December 2, 2009 at 04:34 PM Boa tarde... Tenho estado aqui com um problema que envolve estruturas e apontadores. Preciso de criar uma funcao generica que ira ser utilizada noutra para inserir determinadas informacoes na estrutura de momento tenho este rabisco de codigo void le_nss(NUMERO *numero) { /*int i; printf("Qual e o numero de serie: "); scanf(" %d", &i); le_int(&numero->num_serie, i); */ } A funcao generica e a le_int e tem como cabeçalho int le_int(char *text, int *num) ------------------- Alguem pode.me ajudar a resolver estes problema? Link to comment Share on other sites More sharing options...
Baderous Posted December 2, 2009 at 04:38 PM Report Share #298404 Posted December 2, 2009 at 04:38 PM Mas queres guardar o i no num_serie? Se sim, então tens de ter cuidado porque têm tipos diferentes: o num_serie é string enquanto que i é int. E acho que estás a passar mal os parâmetros na le_int. O 1º não precisa do operador & porque sendo numero um apontador para a estrutura, o operador '->' já acede ao campo correctamente. No i é que precisas de indicar o endereço através do &. Link to comment Share on other sites More sharing options...
Upper Posted December 2, 2009 at 04:41 PM Author Report Share #298406 Posted December 2, 2009 at 04:41 PM typedef struct numero { int num_serie; }NUMERO; A estrutura e esta...esqueci de passar Tudo bem mas agora como e que eu do le_int insiro nesta estrutura... Link to comment Share on other sites More sharing options...
Baderous Posted December 2, 2009 at 04:59 PM Report Share #298412 Posted December 2, 2009 at 04:59 PM Sendo assim, então o tipo char* na função le_int está incorrecto. Já agora, peço desculpa mas enganei-me no post anterior, tu estavas a fazer correctamente, eu é que vi mal a maneira como estavas a fazer. Aqui fica a forma como fiz: #include <stdio.h> #include <stdlib.h> typedef struct numero { int num_serie; }NUMERO; int le_int(int *num, int i) { if (num) { *num=i; return 1; } else return 0; } void le_nss(NUMERO *numero) { int i; printf("Qual e o numero de serie: "); scanf("%d", &i); le_int(&numero->num_serie,i); } int main(void) { NUMERO *n; n = (NUMERO*)malloc(sizeof(NUMERO)); le_nss(n); printf("%d\n",n->num_serie); return 0; } Link to comment Share on other sites More sharing options...
Upper Posted December 2, 2009 at 05:03 PM Author Report Share #298413 Posted December 2, 2009 at 05:03 PM Ja vi, assim funciona mas se nao podesse utilizar o malloc como e que ficaria? (e que assim exploro o lado mais "estupido") Link to comment Share on other sites More sharing options...
Baderous Posted December 2, 2009 at 05:15 PM Report Share #298415 Posted December 2, 2009 at 05:15 PM Repara que eu ao início estou a criar um apontador para a estrutura, e não a própria estrutura, isto é, estou apenas a alocar 4 bytes (apontador) que eventualmente referenciarão a estrutura (que poderá ter uma dimensão variável). De modo que me vejo obrigado a alocar espaço para a própria estrutura posteriormente através do malloc. Caso quisesse criar logo a estrutura bastava definir: 'NUMERO n', e usava o operador '.' para aceder aos campos da mesma. int main(void) { NUMERO n; le_nss(&n); printf("%d\n",n.num_serie); return 0; } Link to comment Share on other sites More sharing options...
Upper Posted December 2, 2009 at 05:28 PM Author Report Share #298417 Posted December 2, 2009 at 05:28 PM mas eu nao posso por exemplo usar o apontador da estrutura mas em vez de reservar memoria simplesmente usala? Link to comment Share on other sites More sharing options...
Baderous Posted December 2, 2009 at 05:31 PM Report Share #298418 Posted December 2, 2009 at 05:31 PM Se não reservares memória, o apontador aponta para uma zona de memória qualquer e a estrutura em si ainda não existe. Só depois do malloc é que a estrutura é criada. Até lá só tens um mero apontador. Link to comment Share on other sites More sharing options...
Upper Posted December 2, 2009 at 05:35 PM Author Report Share #298420 Posted December 2, 2009 at 05:35 PM hmmm ok obrigado pela ajuda 🙂 Link to comment Share on other sites More sharing options...
Upper Posted December 2, 2009 at 05:38 PM Author Report Share #298424 Posted December 2, 2009 at 05:38 PM Reparei agora uma coisa no teu le_int poseste int * num e nao char * .... existe e claro algumas modificacoes certo»? Link to comment Share on other sites More sharing options...
Baderous Posted December 2, 2009 at 05:39 PM Report Share #298425 Posted December 2, 2009 at 05:39 PM Pus int* porque tu vais passar o endereço do inteiro pertencente à estrutura (num_serie) onde vais guardar o valor lido. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now