There's another huge bug in your code which stems from a quirk of C (and C++):
Plain char can be either signed or unsigned.
Next, do you really want to normalize the return-values to one of -1, 0 and 1, or is negative, zero, positive enough? The latter is what the standard does... and it's less work.
int compareStrings(const char* s1, const char* s2)
{
while (*s1 && *s1 == *s2) {
++s1;
++s2;
}
return (int)(unsigned char)*s1 - (int)(unsigned char)*s2; // not normalized
return *s1 == *s2 ? 0 : (unsigned char)*s1 < (unsigned char)*s2 ? -1 : 1; // normalized
}
(The code assumes that an int is bigger than a char.)