#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Pessoa {
    char nome[20];
    int dataNasc[3];
    int telefone;
} pessoa;
//Preenche o cadastro - OPERADOR SETA ->
void preencher(pessoa *cadastro) {
    printf ("Digite um nome: ");
    gets (cadastro->nome);
    printf ("Digite a data de nascimento: ");
    scanf ("%d/%d/%d", &cadastro->dataNasc[0], &cadastro->dataNasc[1], &cadastro->dataNasc[2]);
    printf ("Digite o numero do celular: ");
    scanf ("%d", &cadastro->telefone);
}
//Mostra o cadastro
void mostrar(pessoa *cadastro) {
    printf ("%s\n", cadastro->nome);
    printf ("%02d/%02d/%d\n", cadastro->dataNasc[0], cadastro->dataNasc[1], cadastro->dataNasc[2]);
    printf ("%d\n", cadastro->telefone);
    printf ("\n");
}
//Inicializa as estruturas.nome[0] com ''
void inicia(pessoa *cadastro, int tamanho) {
    register int i;
    for (i = 0; i < tamanho; i++) {
        cadastro[i].nome[0] = '';
    }
}
int main(void) {
    pessoa *cadastro = NULL;
    int i, qtde;
    printf ("Digite a quantidade ");
    scanf ("%d", &qtde);
    fflush(stdin);
        //Aloca x espaço para cadastro
    cadastro = malloc(sizeof(pessoa) * qtde);
        //Testa se realmente foi alocado
    if (!(cadastro = malloc(qtde))) {
        printf ("não alocou.");
        exit(1);
    }
    inicia(cadastro, qtde);
    for (i = 0; i < qtde; i++) {
        fflush(stdin);
        preencher(&cadastro[i]); //Passo o endereço de cadastro para a função
    }
    for (i = 0; i < qtde; i++) {
        mostrar(&cadastro[i]); //Passo o endereço de cadastro para a função
    }
    return 0;
}  Consertei, compilo. Mas ainda tem um erro, não consigo escrever em cadastro->nome. Já tentei inicicalizar esse campo com a funçao inicia , mas nada. Me ajuda de novo por favor!