Dipende da questo for

for(p=0; s1[p] != '\0'; p++)

in cui tu usi s1 come se fosse una stringa mentre e' un char perche' dichiarato cosi'

char _cp_string(char s1, char s2)

E se e' un char non puo' essere una stringa .... rivedi il codice ...