gpt4 book ai didi

c++ - 在改变 c 字符串时避免内存泄漏

转载 作者:太空狗 更新时间:2023-10-29 19:40:05 26 4
gpt4 key购买 nike

出于教育目的,我在一些测试程序中使用了 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;
}

最佳答案

像这样的函数的标准方法是让用户传入一个 char[] 缓冲区。例如,您在 sprintf() 等函数中看到了这一点,它们将目标缓冲区作为参数。这允许调用者负责分配和释放内存,将整个内存管理问题集中在一个地方。

关于c++ - 在改变 c 字符串时避免内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1185689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com