Apesar do meu post não ter alcançado muita gente, encontrei a resposta, consecutivamente vim trazer pra vocês, caso haja alguem com a mesma dúvida.
Ao estudar a materia de LP na faculdade o professor estava passando todas as estruturas de dados em C, eu quis implementar alguns conceitos de C em C++, isso tava acarretando em diversos erros de compilação que teoricamente não deveriam acontecer. Alterei todo o codigo conforme percebi e ja consegui desenvolver duas funcionalidade, a função "adicionarContato()" e a função "listarContatos()", porem estou agora pensando como resolver a questão dos vetores alocados dinamicamente, consigo adicionar um item, mas ele sobre escreve inves de adicionar mais um espaço de memoria, estou corrigindo o codigo mas ainda há varios erros de logica e sintaxe, mas é justamente por isso que estou trazendo aqui, segue o código abaixo:
Obs.: Estou pensando em usar a estrutura de Pilha para criar a lista de contatos. Mas ja me disseram que pra esse caso Lista é melhor, caso tenha alguma dica, favor comentar abaixo!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct contato {
char nome[30];
char telefone[30];
char email[30];
struct contato *primeiro;
struct contato *ultimo;
} CONTATO;
typedef struct agenda {
char nome[30];
CONTATO *listaContato;
} AGENDA;
AGENDA *criarAgenda(char[30]);
void adicionarContato(AGENDA *);
void listarContato(AGENDA *);
int main() {
// DECLARANDO VARIAVEIS
char nome[30];
AGENDA *ptrAgenda;
int sairMenu = 0;
int opcaoMenu;
// ENTRADA DE DADOS
printf("Digite um nome \n");
fgets(nome, 30, stdin);
strtok(nome, "\n");
// PROCESSAMENTO
ptrAgenda = criarAgenda(nome);
if (ptrAgenda == NULL) {
printf("Erro ao alocar a agenda");
} else {
// MENU
do {
printf("Bem vindo - %s \n\n", ptrAgenda->nome);
printf("1 - Adicionar Contato \n");
printf("2 - Listar Contatos \n");
printf("3 - Excluir Contato \n");
printf("4 - Fechar Agenda \n");
scanf("%d", &opcaoMenu);
printf("\n A escolha do menu foi: %d \n\n", opcaoMenu);
switch (opcaoMenu) {
case 1:
adicionarContato(ptrAgenda);
break;
case 2:
listarContato(ptrAgenda);
break;
case 3:
// excluirContato("string");
printf("Excluiu o Contato! \n");
break;
case 4:
sairMenu++;
break;
default:
printf("Opção invalida, favor tentar novamente! \n");
break;
}
} while (sairMenu == 0);
}
return 0;
}
AGENDA *criarAgenda(char nome[30]) {
AGENDA *novaAgenda;
novaAgenda = (AGENDA *)malloc(sizeof(AGENDA));
strcpy(novaAgenda->nome, nome);
novaAgenda->listaContato = (CONTATO *)malloc(sizeof(CONTATO));
int tamContatos = (int)sizeof(novaAgenda[0].listaContato) /
(int)sizeof(novaAgenda[0].listaContato[0]);
return novaAgenda;
};
void adicionarContato(AGENDA *agenda) {
// DECLARANDO VARIAVEIS
char nomeContato[30], telContato[30], emailContato[30];
// ENTRADA DE DADOS
printf("Digite o nome do novo Contato! \n");
scanf("%29s", nomeContato);
printf("Digite o telefone do novo Contato! \n");
scanf("%29s", telContato);
printf("Digite o email do novo Contato! \n");
scanf("%29s", emailContato);
// PROCESSAMENTO
int tamListaContatos =
(int)sizeof(agenda[0].listaContato) /
(int)sizeof(agenda[0].listaContato[0]); // VERIFICANDO TAMANHO DA LISTA
if (agenda[0].listaContato[0].primeiro == NULL) {
// VERIFICA SE JA FOI CADASTRADO ALGUM CONTATO NA AGENDA
strcpy(agenda[0].listaContato[0].nome, nomeContato);
strcpy(agenda[0].listaContato[0].telefone, telContato);
strcpy(agenda[0].listaContato[0].email, emailContato);
agenda[0].listaContato[0].primeiro = &agenda[0].listaContato[0];
agenda[0].listaContato[0].ultimo = &agenda[0].listaContato[0];
printf("Contato adicionado com sucesso! \n");
} else {
// CASO JA TENHA ALGUM CONTATO ELE UTILIZA O REALOC
printf("\n\nCAIU NO REALLOC\n\n");
agenda[0].listaContato = (CONTATO *)realloc( agenda[0].listaContato, 1 + sizeof(agenda[0].listaContato[0]));
int tamListaContatos = (int) sizeof(agenda[0].listaContato) / (int)1 + (sizeof(agenda[0].listaContato[0]));
printf("\n\n%d\n\n", tamListaContatos);
strcpy(agenda[0].listaContato[tamListaContatos].nome, nomeContato);
strcpy(agenda[0].listaContato[tamListaContatos].telefone, telContato);
strcpy(agenda[0].listaContato[tamListaContatos].email, emailContato);
printf("Contato adicionado com sucesso! \n");
}
}
void listarContato(AGENDA *agenda) {
int tamListaContatos =
(int)sizeof(agenda[0].listaContato) / (int)sizeof(CONTATO);
for (int i = 0; i <= tamListaContatos; i++) {
printf("Contato id: %d \n", i);
printf("Contato nome: %s \n", agenda[0].listaContato[i].nome);
printf("Contato telefone: %s \n", agenda[0].listaContato[i].telefone);
printf("Contato email: %s \n", agenda[0].listaContato[i].email);
}
};