Ir para o conteúdo
Upper

Problemas com estruturas e apontadores

Mensagens Recomendadas

Upper    0
Upper

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Upper    0
Upper

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

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;
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

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;
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade