教育目的で、いくつかのテスト プログラムで cstring を使用しています。「...」などのプレースホルダーを使用して文字列を短くしたいと考えています。
つまり、最大長が 13 に設定されている場合に"Quite a long string"
なり"Quite a lo..."
ます。さらに、元の文字列を破棄したくないため、短縮された文字列はコピーにする必要があります。
以下の(静的)メソッドは、私が思いついたものです。私の質問は次のとおりです。短縮された文字列にメモリを割り当てるクラスも、それを解放する責任がありますか? 私が今行っているのは、返された文字列を別の「ユーザー クラス」に格納し、メモリの解放をそのユーザー クラスに任せることです。
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;
}