... c++ strings already are dynamic. if you want a dynamic array of strings, you can use vector, which is also dynamic. if you want to preallocate space rather than let it do it for you, that is a different question.
if you want to do a c-string, consider not doing that and using string instead, but its just basic pointer ops... char* cs = new char[somemaxsize]; ...use it... delete[] cs;
you can also just take &var[0] but if you modify it you will be sorry. Sometimes you get a 'no can do on const' issue with the above, even if you didn't modify it. And that pointer can degrade if the string decides to grow its internal memory, like an iterator. Its best avoided, but sometimes you have to.
If you need a non-const char* you can just use the data() member function (since C++17). The need for this should be pretty rare though. It's mostly for interaction with old C functions.