Io pensavo ad una cosa di questo tipo (posto il codice), anche se sarei curioso di sapere se ritornare la struct come avevi fatto tu è corretto...chiedo aiuto a qualche saggio del forum! 
codice:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct data{
int giorno;
int anno;
char mese[10];
char ora[10];
};
void inserisciData(struct data*);
int main()
{
int i;
struct data domani;
printf("Avvio del programma\n");
inserisciData(&domani);
printf("Il giorno e': %d\n",domani.giorno);
printf("Il mese e': %s\n",domani.mese);
printf("L'anno e': %d\n",domani.anno);
printf("L'ora e': %s\n",domani.ora);
return 0;
}
void inserisciData(struct data* oggi){
int day, month, year; // giorno anno mese
int hour, minute;
int x = 0; // variabile che uso per controllare se la data inserita è corretta o meno. settata a 0 non lo è settata a 1 si
int y = 0; //uguale a sopra solo per l'ora
char orario[10];
char* nomemese[]={"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"};
do{
printf("Inserisci un giorno: \n");
scanf("%d",&day);
printf("Inserisci un mese: \n");
scanf("%d",&month);
printf("Inserisci un anno: \n");
scanf("%d",&year);
if(day<1 || day>31){
printf("I mesi hanno al massimo 31 giorni\n");
}
if(month<1 || month>12){
{
perror("malloc");
exit(-1);
}
printf("Hai inserito un numero di mese che non esiste\n");
}
else if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
if(day>0 && day<=31){
x=1;
}
}
else if(month==4 || month==6 || month==9 || month==11){
if(day>0 && day<=30){
x=1;
}
}
else if(month==2){
if(day>0 && day<29){
x=1;
}
}
else
printf("Hai digitato un numero di giorni che non corrsiponde al mese che hai inserito\n");
if(x==0){
printf("Ripeti l'inserimento della data\n");
}
}while(x==0);
do{
printf("Inserisci l'ora dell'appuntamento e poi alla prossima richiesta i minuti (hh): \n");
scanf("%d", &hour);
printf("Inserisci i minuti (mm): \n");
scanf("%d", &minute);
if(hour>=0 && hour<=23){
if(minute>=0 && minute<=59){
y=1;
}
}
}while(y==0);
sprintf(orario, "%d:%d", hour, minute);
oggi->giorno=day;
strcpy(oggi->mese,nomemese[month-1]); /*-1 perchè l'array parte da 0*/
oggi->anno=year;
strcpy(oggi->ora,orario);
printf("Il giorno e': %d\n",oggi->giorno);
printf("Il mese e': %s\n",oggi->mese);
printf("L'anno e': %d\n",oggi->anno);
printf("L'ora e' %s\n",oggi->ora);
return ;
}