What is wrong with my program for not giving the output of the structure object?

Asked

Viewed 38 times

0

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
#define MAX 30
#define N_DISCIPLINAS 5
#define N_CHARDISCIPLINAS 30
/* run this program using the console pauser or add your own getch, system("pause") or input loop */


typedef struct
{
    char nome[MAX];
    int nAluno;
    char disciplinas[N_DISCIPLINAS][N_CHARDISCIPLINAS];
}Estudante;

void mostraAluno(Estudante *aluno);

//MAIN
int main(int argc, char *argv[]) {
    setlocale(LC_ALL, "Portuguese");
    Estudante *aluno1;
    aluno1 = malloc(sizeof(Estudante));
    strcpy(aluno1->nome, "Tomás Oom");
    aluno1->nAluno = 11092719;
    strcpy(aluno1->disciplinas[0], "Matemática");
    strcpy(aluno1->disciplinas[1], "Ética");
    strcpy(aluno1->disciplinas[2], "HCP");
    strcpy(aluno1->disciplinas[3], "Programação Avançada");
    strcpy(aluno1->disciplinas[4], "Redes e Comunicações");
    
    mostraAluno(&aluno1);
    
    return 0;
}

void mostraAluno(Estudante *aluno)
{
    int i;
    aluno = malloc(sizeof(Estudante));
    printf("ALUNO:\n");
    printf("Nome: %s", aluno->nome);
    printf("\n NºAluno: %d", aluno->nAluno);
    printf("\nDisciplinas:\n");
    for(i = 0; i<N_DISCIPLINAS; i++)
    {
        printf("\t %s", aluno->disciplinas[i]);
    }
}

1 answer

0

Good night!

There are basically two errors in your code. The first is the time to pass the structure as argument in the function. Note:

// Sua função pede um endereço de uma struct
void mostraAluno(Estudante *aluno);

When you create the pointer and allocate memory, Estudante *aluno1; and aluno1 = malloc(sizeof(Estudante));, then aluno1 points to an address of a structure, so it is not necessary to & as argument. Just put:

// Aqui está correto
mostraAluno(aluno1);

// Aqui está errado
// Ao fazer isso, você está passando o endereço
// do ponteiro que aponta para a estrutura e não o endereço
// da estrutura
mostraAluno(&aluno1);

The second mistake is making another malloc in your program. Note that aluno is already pointing to a structure and when you do aluno = malloc(sizeof(Estudante));, the aluno stops pointing to this structure and starts pointing to another one that you have just created. Just remove aluno = malloc(sizeof(Estudante)); to fix this problem.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.