Gente, tô tendo um problema com a função showAll(). Quando vou printar o vetor, aparece só o endereço de memória, não o conteúdo dele em si. Acho que provavelmente tô usando de forma errada os ponteiros, mas não sei como concertar.
Outro problema que encontrei é que, se eu não declarar as variáveis ali no começo como sendo vetores, da um erro na hr da execução: “Falha de segmentação. Imagem de núcleo gravada”
Código inteiro:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int gsize = 1; //Capacidade de armazenamento da agenda.
int gn = 0; //Número de contatos existentes na agenda.
struct contact
{
char name[100];
char street[100];
char ngbhood[100];
char city[100];
char state[100];
int bday[15];
int cellnumber[20];
int number[10];
int CEP[20];
};
void newContact(struct contact *schedule)
{
schedule = (struct contact *)malloc(sizeof(struct contact)*gsize);
if (gn == gsize) //aumenta a capacidade de armazenamento, caso necessário.
{
gsize *= 2;
schedule = realloc(schedule, sizeof(struct contact)*gsize);
}
printf("Nome: ");
scanf("%s", schedule[gn].name);
printf("Data de nascimento [ddmmaaaa]: ");
scanf("%d", schedule[gn].bday);
printf("Telefone: ");
scanf("%d", schedule[gn].cellnumber);
printf("Rua: ");
scanf("%s", schedule[gn].street);
printf("Nº: ");
scanf("%d", schedule[gn].number);
printf("Bairro: ");
scanf("%s", schedule[gn].ngbhood);
printf("CEP: ");
scanf("%d", schedule[gn].CEP);
printf("Cidade: ");
scanf("%s", schedule[gn].city);
printf("Estado: ");
scanf("%s", schedule[gn].state);
printf("==================================");
printf("\nContato adicionado");
printf("\n==================================");
gn++;
}
void showAll(struct contact *schedule)
{
if (gn == 0)
printf("\nNão há nada para exibir aqui.");
else
{
for (int i = 0; i < gn; i++)
{
printf("\n-----------------------------------------");
printf("\n\t\tVisualizando agenda");
printf("\n-----------------------------------------");
printf("\nNome: %s\tData de nasciemnto: %d\tTelefone: %d", schedule[i].name, *schedule[i].bday, *schedule[i].cellnumber);
}
}
}
void main()
{
struct contact schedule;
int op;
_Bool truth = 1;
while (truth)
{
printf("\n-----------------------------------------");
printf("\n\t\tAGENDA");
printf("\n-----------------------------------------");
printf("\n[1]Cadastrar novo contato");
printf("\n[2]Ver contatos");
printf("\n[3]Pesquisar contatos por nome");
printf("\n\[4]Alterar informações de contato");
printf("\n[0]Sair");
printf("\n-----------------------------------------");
printf("\nSua resposta: _");
scanf("%d", &op);
printf("-------------------\n");
switch (op)
{
case 1:
newContact(&schedule);
break;
case 2:
showAll(&schedule);
break;
case 0:
truth = 0;
break;
default:
printf("Opção inválida.");
break;
}
}
}