Forgot to ask how sc is declared as well?
if it is something like
unsigned char* sc;
then you will need to cast it to a signed char...
memcpy(&buf[2036], sc, strlen((char *)sc));
however this could result in the loss of data, is there a reason why one is declared unsigned and the other signed? Also it may help if you give more detail on what you are trying to do - there may be another reason (although admittedly C++ isn't my strong point)