Как расширить размер с сохранением данных(realloc) с массивом string в с++
Думаю, что по честному (т.е. не завязываясь на конкретное внутреннее представление string) -- никак, только выделив новый массив и скопировав/переместив объекты из старого массива в новый. Имеет смысл эту работу делегировать стандартному контейнеру vector, где эта логика уже должна быть реализована.