The question boils down to:
If I write this:
int x = 'ÿ';
x will be -1 but I’d like it to be 255.
It’s -1 because 'ÿ' is a char of value 0xff. But as char is signed on your platform, sign extension takes place when you assign it to an int.
The solution is to write:
int x = (unsigned char)'ÿ';
So instead of islower('ÿ') write islower((unsigned char)'ÿ').
2
solved Why passing char as parameter to islower() does not work correctly?