0xff will be seen as an integer constant, with the value of 255. You should always pay attention to these kind of comparison between different types. If you want to be sure that the compiler will generate the right code, you should use the typecast:
if( *p == (signed char)0xFF ) break;
Anyway, beware that the next statement will not work the same way:
if( (int)*p == 0xFF ) break;
Also, maybe it would be a better idea to avoid signed chars, or, it you must use signed chars, to compare them with signed values such as -1 in this case:
if( *p == -1 ) break;
0xff==-1 only if those values would be assigned to some char (or unsigned char) variables:
char a=0xff;
char b=-1;
if(a==b) break;