В учебных целях я использую cstrings в некоторых тестовых программах. Я хотел бы сократить строки с помощью заполнителя, такого как «...».Избегайте утечек памяти во время мутирования c-строк
То есть "Quite a long string"
будет "Quite a lo..."
, если моя максимальная длина установлена в 13. Кроме того, я не хочу уничтожать исходную строку - поэтому сокращенная строка должна быть копией.
Ниже приведен метод (статический), с которым я сталкиваюсь. Мой вопрос: Должен ли класс, выделяющий память для моей сокращенной строки, также отвечать за ее освобождение? Теперь я хочу сохранить возвращенную строку в отдельном «классе пользователя» и отложить освобождение памяти для этого класса пользователя.
const char* TextHelper::shortenWithPlaceholder(const char* text, size_t newSize) {
char* shortened = new char[newSize+1];
if (newSize <= 3) {
strncpy_s(shortened, newSize+1, ".", newSize);
}
else {
strncpy_s(shortened, newSize+1, text, newSize-3);
strncat_s(shortened, newSize+1, "...", 3);
}
return shortened;
}
Поскольку вы используете C++, почему бы не использовать std :: string для вашего типа возврата? Тогда управление памятью намного проще. –
Пожалуйста, прочитайте OP. – jkeys
Я ничего не вижу в OP, говоря, что очень важно использовать только строки C. Вопрос @ Домен действителен imo – jalf