Ir ao conteúdo
  • Cadastre-se

Como criar o ponteiro de uma struct?


lunalovegood
Ir à solução Resolvido por LNW,

Posts recomendados

Boa tarde, o exercício diz: Defina um registro para armazenar os dados (nome, sobrenome, RG, salário) de um empregado em uma empresa. 

Use um ponteiro para acessar cada atributo. Apresente os dados armazenados.
Estou com dificuldade em criar um ponteiro para a struct, o código abaixo está dando falha de segmentação, imagino que só pode estar dando isso porque não estou sabendo definir o ponteiro corretamente.
Já tentei também colocar o 
struct dados *p;

dentro da própria struct dados, mas o erro continua o mesmo e eu não sei como consertar, preciso de ajuda.

Obrigada.

 

 
#include<stdio.h>#include<stdlib.h>int main(){       struct dados    {           char nome[20], sobrenome[40];           int rg;           float salario;               };        struct dados *p;        printf ("Digite o primeiro nome do funcionario: "); scanf("%s", &p->nome);    printf ("\nDigite o ultimo nome do funcionario: "); scanf("%s", &p->sobrenome);    printf ("\nDigite o RG do funcionario: "); scanf("%d", &p->rg);    printf ("\nDigite o salario do funcionario: "); scanf("%f", &p->salario);        printf ("\n\n\nApresentacao dos dados:");    printf ("\nNome do funcionario: %s %s", p->nome, p->sobrenome);    printf ("\nRG: %d", p->rg);    printf ("\nSalario: %f", p->salario);        system("pause");    return 0;}
 
Link para o comentário
Compartilhar em outros sites

  • Solução

@lunalovegood

 

 

Você apenas declarou o ponteiro, mas não alocou memória. Você pode usar um malloc ou fazê-lo através de uma variável já declarada, portanto, já com sua memória alocada:

struct dados *p, x;p = &x;

Você declara o ponteiro e uma variável. Depois, aponta p para a mesma região de memória de x. p aponta para x.

 

Ou usa um malloc:

struct dados *p = (struct dados*)malloc(sizeof(struct dados));

Você mesma faz a alocação de memória de maneira direta.

 

 

Remova também o operador & usado na leitura de nome e sobrenome. Um ponteiro para o array já é passado durante uma chamada de função.

 

 

Bom, o typecast (ter isto (struct dados*) incluso na frente de malloc) não é necessário, mas para evitar o 'ah, não compilou aqui', pois provavelmente estará usando um compilador de C++, então que fique assim, pelo menos vai compilar..

 

 

 

[ ]'s

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...