I see only two wrong things.
You decrease cp such a way that the final value of cp will point beyond the first element of the array. The C/C++ standards do not allow that a pointer points beyond the first elemnt of an array.
So the second loop I would rewrite the following way
1 2
cp = c + lim;
for ( syc = 0; syc < lim; syc++ ) cout.put( *--cp );