How many ways are there to do strings? If you hang around Carbon for awhile you will run into several string types. You will need to be able to convert from one type to the other. It's not possible to pick just one type and stick with it. Different parts of the API require different types of strings.

TypeDeclarationDescription
C Strings:char*, const char*, UInt8*, const UInt8* an array of 1-byte characters with a null termination.
Pascal Strings:Str255, StringPtr an array of 1-byte characters with a 1-byte length as the first character. No null termination.
C++ Strings:std::string, std::wstring strings from the STL (Standard Template Library) that are either 1-byte or 2-byte characters (or 4-byte characters if you use GCC's wstring).
CF Strings:CFStringRef const strings from the Core Foundation Library. It is an opaque type.
CF Mutable Strings:CFMutableStringRef non-const strings for the Core Foundation Libary.
HFS Unicode Strings:HFSUniStr255this is a unicode string (16-bit characters) with a (16-bit) leading length character