The pointers don't have signs - the pointers themselves are OK.
They are pointing to different kinds of data: unsigned char, or signed char. This is what you get the warning from.
It's a bit surprising, but the char, used to represent the ASCII characters, come in both unsigned and signed forms. More confusingly, they are sometimes used interchangeably - the wrap around magically "fixes" the issue.
Having separate signed and unsigned char makes a lot of sense when you use "char" as a general-purpose 8-bit storage; not to represent a character. In this case, I strongly suggest using stdint.h types. For C string, just use char[] and char*.
AFAIK, "char" is implementation defined, so internally, it can be either "unsigned char" or "signed char". This being said, the standard C libraries are built so that just using "char" alone should always work.