Je t'aide un peu

si j'ai bien compris !
Tu veux transformer des nombres en chaine de caracteres...
tu veux concatener ces chaines pour n'en former qu'une qui sera ta reference.
transformer un nombre en chaine:
char temp[50];
sprinf(temp,"%d", tab[i].Entity);
c'est comme un printf...
Apres pour concater tout ca tu fais des :
strcat(ref, temp);
rien de bien compliqué
il doit y avoir moyen de jouer avec le sprintf :
sprinf(Ref,"%d", tab[i].Entity);
sprinf(temp,"%s%d", Ref, tab[i].Year);
sprinf(Ref,"%s%d", temp, tab[i].Project);
strcat(Ref,Kind);
Par contre ca sent le bug...
scanf("%s",&tab[i].Kind);
y'a pas de & c'est une chaine! une chaine est deja un pointeur char *
Quand tu rentres des donnees dans des char[] assure toi d'avoir la place!
rentre dans un temp[255], apres tu checks la taille :
scanf("%s",temp);
if (strlen(temp)<4) {
strcpy(Kind,temp);
}
else // print error!
et ton Kind doit etre un char[4] pour le 0 qui termine toute chaine de caractere!
J'espere ne pas avoir dit de connerie