GDNet community manager Washu has written about the perils of C-style strings for beginners (in C++). In his post, he covered a variety of excellent points, but he missed one of my favorites: C-style strings are not a type.
A C-style string is just an interpretation of an actual type (a char*) that adds some additional semantics. These semantics are not enforced by the language, except implicitly and very poorly via some C library functions. This approach, which presumably grew out of the “pay for what you use” mentality, is a huge part of what makes C-style strings cumbersome and error-prone.