Use vector and string instead of C-style arrays and char *
Use std::vector whenever you need to create a buffer of data, even if the size is fixed.
Use std::string whenever you need to have a string.
How it clearly facilitates safer code, which minimizes the risk of enigmatic bugs, which increases maintainability, etc.?
std::vector: The user of a vector can always find its size, and the vector can be resized if needed. It can even be given (through the (&(myVector[0])) notation) to a C API. Of course, the vector will clean after itself.
std::string: Almost the same reasons above.And the fact it will always be correctly initialized, that it can't be overrun, that it will handle modifications gracefully, like concatenations, assignation, etc, and in a natural way (using operators instead of functions)