Il problema è quello che hai descritto tu: richiede di inserire una stringa, io inserisco il cognome, ma quando deve restituire i dati, il cognome lo lascia vuoto. Non ho capito esattamente dove inserire i getchar()...
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define FILE_COMUNI  "codicicatastali.txt"

int main(int argc, char *argv[])
{
  FILE *fp;
  char nome[20],cognome[20],data[8],codice[20],conscogn[20],consnom[20],vocnom[20],voccogn[20],mese[5],giorno[5],anno[5],nome_comune[60],codice_comune[4];
  char sesso;
  
  
  printf("Inserire:\nNome:\nCognome:\nData di nascita in formato GG/MM/AA:\nSesso(m or f):\nComune di nascita:");
  
  gotoxy(6,2);gets(nome);
  gotoxy(9,3);gets(cognome);
  gotoxy(37,4);gets(data);
  gotoxy(15,5);scanf("%c",&sesso); getchar();      
  gotoxy(19,6);gets(nome_comune);gotoxy(1,7);
  
  printf("Verifica dati inseriti:\n");
  printf("Nome:%s\nCognome:%s\nData:%s\nSesso:%c\nComune:%s",nome,cognome,data,sesso,nome_comune);
  
  system("PAUSE");	
  return 0;
}