You can convert a Str to a const char* at any time by
simply doing a C or C++-style cast. The cast operator simply returns
the value of Str::data and is therefore very fast.
Str x = "Hello";
char buff[64];
// Here are C-style cast examples
printf("%s\n", (const char*)x);
strcpy(buff, x);
printf("strlen(x) = %u, x.length(x) = %u\n", strlen(x), x.length());
// Here is a C++-style cast
printf("%s\n", static_cast<const char*>(x));
One thing to note in the example above is that we only had to explicitly
use the cast operator when making the call to printf(). This is
because printf does not know the type of its arguments and needs
a little help. In the strcpy() and strlen() cases, a cast
was not required because these directly take const char* as an
argument. It is, of course, OK to explicitly cast in these cases anyway
if you believe it improves the clarity of the code.
Also, even though strlen(x) and x.length() in the above
return the same answer, x.length() does so much more quickly
because strlen() has to walk the string to find the length. A
basic principle here is that, if a function exists in Str(),
there is a good chance it is taking advantage of the
Str::size_and_flags field to accelerate the operation.