Я предполагаю, что под "преобразованием в cstring" вы подразумеваете использование c_str()
члена строки. Если это так, то в большинстве реализаций это не преобразование, а просто средство доступа. Разница важна только в том случае, если вы беспокоитесь о производительности (что звучит так, как вы). Внутренне std :: strings (почти всегда, но технически не обязательно) представлены как "cstring". Класс позаботится о том, чтобы управлять его размером, но это просто динамически размещаемая строка внизу.
Итак, для прямого ответа: вы должны указать размер массива при использовании cin.getline. Если вы не хотите указывать размер, используйте getline и std :: string. С этим подходом все в порядке.