buondì a tutti!

sono 3 giorni che cerco di risolvere un esercizio lasciato dal mio prof e dato che ho l'esame di fondamenti tra una settimana è meglio che abbia chiaro quest'ultimo passaggio :P

l'esercizio consiste nel creare una funzione capace di memorizzare da un file binario i valori di 3 campi "nome" "cognome" "telefono".

ora, gli errori possono essere due:
o sto allocando male la memoria (non mi pare),
o dopo 130412 prove continuo a fare degli errori nella gestione di fread (molto probabile)

io per darvi un'idea chiara posto sia tutto il sorgente che anche il file .bin
nel mentre vado a studiare analisi :P
grazie in anticipo!

codice:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>


/* definisco la struttura */


struct contatto { 
    char nome[255]; 
    char cognome[255];         
    char telefono[255]; 
};
struct contatto *link;


/* corpo della prima1 funzione */


void contatto_read_bin (struct contatto *pc, FILE *f) {
    link = malloc(sizeof(struct contatto));
    fread(pc->nome, sizeof(char), 255, f);
    fread(pc->cognome, sizeof(char), 255, f);
    fread(pc->telefono,sizeof(char), 255, f);


 }
/* corpo della seconda funzione 


void contatto_print (struct contatto *pc, FILE *f) {


    }
*/


main(){
    FILE *frp;
    FILE *fwp;
    frp=fopen("contatto1.bin", "rb");
    fwp=fopen("contatto.txt", "rt");
    if (frp==NULL || fwp==NULL){
        printf("errore nell'apertura di un file");
        system("pause");
        exit(1);
    } 
contatto_read_bin (link, frp);
printf("\n i valori letti dal file sono: \n nome: %s \ncognome: %s \n numero di telefono: %s.", link->nome, link->cognome, link->telefono);
/*
contatto_print (pc, fwp); */
}
siccome html.it non prevede l'upload di file .bin vi lascio il link al file uppato su mega:
https://mega.co.nz/#!8g4FBaBA!LJflRC...e4k6bG7CuAcTTA