【发布时间】:2009-07-26 22:07:20
【问题描述】:
出于教育目的,我在一些测试程序中使用 cstrings。我想用“...”之类的占位符来缩短字符串。
也就是说,如果我的最大长度设置为 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;
}
【问题讨论】:
-
既然您使用的是 C++,为什么不使用 std::string 作为您的返回类型呢?那么内存管理就简单多了。
-
我在 OP 中没有看到任何内容说必须只使用 C 字符串。 @Don 的问题是有效的 imo
-
好吧,我知道有 std::string。但我喜欢为 C 语言的细微之处而苦恼;)这只是出于个人目的。
-
strncpy 等绝对不是 C 的“好位”。您应该看看 libowfat 以了解 C 的一些非常好的位。如果您个人不喜欢C++ 的根本改进,你的整个问题都注定了。您应该重新标记它,因为它不再是关于 C++ 的问题。如果您想在 C 语言中找到解决问题的好方法,请查看 libowfat:fefe.de/libowfat
-
@vog 重新标记的问题。顺便说一句,“好位”的意思是讽刺-无论如何,感谢您的链接。
标签: c++ memory-management connection-string cstring