They are as safe as your programming practices. As long as you know how to work with them properly, they are perfectly safe. For those whose programming style makes one think of an elephant in a china shop, such strings might not be safe. But then the same thing can be said about the entire C/C++ languages.
Your original one-line declaration example already suffers from unsafe style problems. In both C and C++ string literals are non-modifyable lvalues. It is not a good idea to create [long-lived] non-const pointers pointing into such literals. Normally, it should look as follows
const char *str = "This is a c-styled string";
Note the extra 'const'.
(This particular rule cannot be always followed in C, but normally it is only necessary to violate it in some well-controlled localized idiomatic code.)