Ti aiuterei, ma sapendo per quale scopo potrebbe servire il tuo programma mi astengo.
Scherzo.
codice:
char a[d];
è vietato dallo standard.

codice:
if(a[i] == 'p' || 'e' || 'r') a[i]='x';
è sbagliatissimo ...

Così come:
codice:
return sizeof(a[d]);
Ecco la versione corretta:
codice:
void sostituisci(char *a, size_t d)
{
        for(int i=0; i < d; i++)
        {

            if(a[i] == 'p'){
                        if(a[i + 1] == 'e'){
                                    if(a[i + 2] == 'r'){
                                                
                                                int j;
                                                a[i] = a[i + 1] = a[i + 2] = 'x';

                                                //shifta l'array di due
                                                for(j = i + 1; j < d - 1; j++){

                                                            a[i] = a[i + 2]                                               

                                                }
                                               
                                    }
                        }
            }

        }
}
Non l'ho provata, probabilmente è sbagliata o malfunzionante