Unsigned char strings on the Mac are usually used to represent Pascal strings. Whereas a C string is a number of characters ending in a null '\0' byte, a Pascal string is a byte indicating how many characters follow, then as many characters (up to 255) as specified. You write a literal Pascal string as "\pString", and the '\p' character gets converted into the string's length.

Pascal strings might be null terminated, but equally they might not be, and the length byte is likely to look like an unprintable character if the string is short. I'm sure you can imagine how this would confuse I/O functions which are expecting C strings.

The bottom line is that you should use char strings instead of unsigned char strings if you want to call standard C string functions on them. Only use Pascal strings if you need them for compatibility with some Carbon functions.

EDIT: that said, if you copy a C string into an unsigned char buffer it should work, although you'd need to cast everything to get it to compile. If this is what you were doing, I can't imagine why it wouldn't work.