la syntaxe "char chaine[]" n´est valable que pour les paramètre d´une fonction.
Mias sinon, une chaine de caractère est de type "char*" : un pointeur vers des caractères.
Donc ta fonction doit être :
char* cCpy(char chaine[], char copy[])
et non :
char cCpy(char chaine[], char copy[])
et à la fin, tu renvoie le pointeur, c´est-à-dire l´adresse du premier élément de la chaine : return ©[0]
ou alors, plus simplement :
return copy;
Car copy est déjà un pointeur vers le premier élément de la chaine (et copy[n] est équivalent à : (*(copy+n)).
Mais comme de toute manière ta chaines est modifié, tu peut aussi retourner par exemple le nombre de caractères copiés, etc.
A noté que le test d´arret de ta fonction est faux (c´est chaine[i]!=0 et non pas i!=0 qu´il faut tester).