That is some funny lines of code .. you forget how baffling things are for beginners :-)
Okay big tip you really don't need a, b, c and d and you already have s1 and s2, that is six pointers. You have got lost in the shear complexity all of your own making by having so many pointers. Part of your learning to code is to distill the problem down to the bare minimum.
So your problem is the first 3 lines inside the function
char *a,*b,*c,*d;
c=a;
d=b;
So what everyone else is telling you is you might want to point a and b somewhere ... probably s1 and s2 values and this gets back to the problem ... why so many pointers.
I am guessing you need only 1 extra pointer, which is the temporary one you move along. You set it to to s1 move it along doing your case conversion as you go. Then you set it to s2 move it along doing your case conversion on each character as you go. Then you display s1 and s2 and job done. I am not sure you want to be moving s1 and s2 that is the pointer to your actual text buffers and you loose them and you are dead in the water.